类问题 很简单

来源:百度知道 编辑:UC知道 时间:2024/09/21 06:38:08
我重载了操作符号
ostream& operator << (ostream &ostream,sales_item &temp)
{
ostream << temp.isbn << " " << temp.units_sold << " " << temp.revenue << endl;
return ostream;
}

sales_item operator+ (const sales_item &right)
{
sales_item temp;
temp.isbn = isbn + right.isbn;
temp.units_sold = units_sold + right.units_sold;
temp.revenue = revenue + right.revenue;
return temp;
}

为什么 我不能 cout << 对象1 + 对象2 << endl

只能对象3 = 对象1 +对象2
cout << 对象3;

如何更改呢
2 楼 3楼
没解决我的问题啊

ostream& operator << (ostream &ostream,sales_item &temp)
修改为:
const ostream& operator << (const ostream &ostream, const sales_item &temp)
就可以的吧?
不行的话就直接添加一个拷贝构造函数吧....

不知道你用的是什么编译器...

--------------------------------------
将下句修改:
ostream& operator << (ostream &ostream,sales_item &temp)
->
const ostream& operator << (const ostream &ostream, const sales_item &temp)
就可以了,最主要的是后面那个const sales_item &temp,一个要const.

另外,因为+操作不改变其本身变量值,operator+最好改为const型的:
const sales_item operator+ (const sales_item &right) const

sales_item& operator+ (const sales_item &right)
{
//sales_item temp 不用局部对象,返回this即可
isbn = isbn + right.isbn;
units_sold = units_sold + right.units_sold;
revenue = revenue + right.revenue;
//return temp;
return *this;
}