gpt4 book ai didi

c++ - 重载 operator<< 和 operator+ 导致错误

转载 作者:搜寻专家 更新时间:2023-10-30 23:59:24 26 4
gpt4 key购买 nike

class student
{
private:
int age;
public:
student();
student(int a) {age = a;}
~student() {};
friend student& operator+ (int left, student& s);
friend ostream& operator<< (ostream& o, student& s);
}

...

student& operator + (int left, student& s)
{
s.age += left;
return s;
}

ostream& operator<< (ostream& o, student& s)
{
o << s.age << endl;
}


int main (void)
{
student a (10);
cout << 14 + a ;
return 0;
}

所以我从上面的代码中有两个问题。

  1. 为什么必须在 operator+ (int left, student& s) 函数中执行 return s;?为什么不能将返回类型设置为 void 因为您已经通过引用传递了 student 对象?

  2. 似乎每当我将 endl 放在 14 + a 之后时,我都会收到一个错误,我发现了一个错误,但它没有打印出来。我知道这与“operator <<”有关,但我不知道它的确切原因,您如何防止这种情况发生?

最佳答案

Why do you have to do return s; in the operator+ (int left, student& s) function?

我必须说出你对 operator + 的定义很奇怪,因为它修改了右侧对象 - 而 operator +通常不会,并按值返回一个新对象。

无论如何,operator +通常不返回 void以便它允许链接,如:

14 + (16 + a)

但是,operator +不应该修改右侧对象。您可能打算写类似 operator += 的内容.考虑更改 operator + 的定义.

It seems that I get an error whenever I put endl after 14 + a, I catch an error and it doesn't print. I know this has something to do with `operator <<', but I don't know the exact reason for it, and how do you prevent this from happening?

你的程序有未定义的行为,因为你重载了 operator <<不返回任何东西。您应该添加一个返回语句:

ostream& operator<< (ostream& o, student const& s)
// ^^^^^
{
o << s.age << endl;
return o;
// ^^^^^^^^^ <== Without this, your program has undefined behavior.
// Value-returning functions MUST return a value (with
// the only exception of main())
}

此外,如上所述,您应该接受 student对象引用 const , 自 operator <<不会改变它的状态(如果你不这样做,你不能将 operator <<const 对象一起使用。

关于c++ - 重载 operator<< 和 operator+ 导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16581953/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com