我希望这次我的问题能够更好地制定和格式化。 这是代码,当我认为它不应该产生两个单独的输出,因为我每次使用(我认为)重载运算符<<对于枚举类型。
#include <iostream>
using namespace std;
enum Etat { Intact = 5 };
class Ship {
public:
Etat etat_;
Ship ( Etat t = Intact) : etat_(t) {}
~ Ship() {}
ostream& description ( ) const { return cout << "Etat: " << etat_ << " --- ";}
//---------------------------------------ˆˆˆˆ----
};
ostream& operator<< ( ostream& s, const Etat& etat_ )
{
switch ( etat_ )
{
case Intact: s << "intact"; break;
default: s << "unknown state";
}
return s;
}
ostream& operator<< ( ostream& s, Ship n ) { return s << "Etat: " << n.etat_ ; }
int main()
{
Etat etat_ = Intact;
cout << endl << endl << "Etat: "
<< etat_ << " \"cout << etat_\"" << endl << endl;
cout << Ship(etat_)
<< " \"cout << Ship(etat_)\"" << endl << endl;
cout << Ship(etat_).description()
<< " \"cout << Ship(etat_).description()\"" << endl << endl;
return 0;
}
这是我在终端上得到的:
Etat: intact "cout << etat_"
Etat: intact "cout << Ship(etat_)"
Etat: 5 --- 1 "cout << Ship(etat_).description()"
任何人都可以向我解释为什么,在最后一种情况下,它不仅需要enum attribut的整数值,还会在测试字符串“---”之后添加“1”???
我唯一能想到的是因为我在description()中使用了非正统的返回方法,即'return cout&lt;&lt; ..“,但它似乎有效,因为测试字符串出现了。
有没有办法强制使用运营商&lt;&lt; description()中的重载?
由于
答案 0 :(得分:0)
在description()函数中,您将返回对std :: cout的引用,并在main函数的std :: cout调用中使用它。运营商&lt;&lt;&lt;&lt;&lt;&lt;作为第一个参数采用ostream参考。你应该像这样修改你的功能,一切都应该有效:
ostream& description(ostream& os) const {
return os << "Etat: " << etat_ << " --- ";
}
打印出来的随机“1”可能是由于您的示例中的ostream试图打印出对自身的引用。