为什么返回类型引用输出流?

时间:2016-09-21 08:45:11

标签: c++ operator-overloading return-type ostream

我是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;
} 

2 个答案:

答案 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;