【发布时间】:2012-03-10 13:41:15
【问题描述】:
我想打印出用户定义类型的对象,例如cout << ob1;
所以我想重载 operatoriosfwd 和 ios_base.h
ostream operator<<( ostream& out, cat& rhs){
out << rhs.a << ", " << rhs.b << endl;
return out ;
}
1)是不是因为不能创建新的ostream对象,所以必须引用返回?
但是当我像这样通过引用返回时:
ostream& operator<<( ostream& out, cat& rhs){
out << rhs.a << ", " << rhs.b << endl;
return out ;
}
它工作正常。
2)有什么解释吗?
【问题讨论】:
-
你得到什么错误信息?
-
还有,为什么要按值返回?
-
附带说明,在您的运算符中使用 endl 会使输出您的类型(意外)刷新 iostream。你可能想跳过它,或者如果你真的想输出到多行,输出一个'\n'代替。
-
@JoachimIsaksson 我猜 endl 对象会正常工作,因为我没有为 endl object 的类型重载 operator
-
@AlexDan 是的,使用它没有问题,不仅仅是 endl 不仅输出换行符,它还刷新流,这需要更多时间。
标签: c++ overloading operator-keyword