我是C ++的新手并且学习运算符重载。现在在followng代码中,除了为什么返回类型是对输出流的引用之外,我得到的一切都有点困惑?
我们有以下枚举。
enum days{ SON, SAT, MON, TUE, WED, THRUS, FRI };
我们正在重载<<
运算符,打印天数而不是数值0,1,2 ......依此类推。
代码是:
ostream& operator <<(ostream &,const days &d)
{
switch(d)
{
case SUN: out << "SUN"; break;
case MON: out << "MON"; break;
case TUE: out << "TUE"; break;
case WED: out << "WED"; break;
.....
...
}
return out;
}
答案 0 :(得分:2)
为什么返回类型是对输出流的引用?
返回ostream&
可以将其链接起来,例如
std::cout << SON << SAT << MON << TUE << WED << THRUS << FRI;
BTW:Output stream不应该被复制(并且不能被复制),因此返回类型是引用(而不是值)。
答案 1 :(得分:1)
ostream类已经为许多类型的数据重载了插入操作符(&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; int,char,char *,string ...
此运算符的返回类型是对ostream对象的引用,因此当您调用它时;你可以使用返回类型来打印另一个东西,打印这个东西的返回类型是对ostream对象的引用,你可以用它来打印另外的东西等等......
当你写:
cout << 1 << "Hello" << 2.7 << endl;
在开头cout打印1并返回一个ostream对象,我们用它来打印“Hello”(调用&lt;&lt;(ostream&amp;,char *))并再次返回对ostream对象的引用,所以我们使用它打印2.7等......
上面的行可以翻译为:
(((cout << 1) << "Hello") << 2.7) << endl;