2016-09-21 2 views
1

Я новичок в 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

Что еще должно быть? –

ответ

1

класс ostream перегрузил оператора ввода (< <) для многих типов данных; int, char, char *, string ...

  • тип возврата этого оператора является ссылкой на объект ostream, поэтому, когда вы его вызываете; вы можете использовать возвращаемый тип для печати другого материала, а возвращаемый тип печати этого материала является ссылкой на объект ostream, который вы можете использовать для печати другого материала и т. д.

  • при написании:

    cout << 1 << "Hello" << 2.7 << endl; 
    

в начале соиЬ принтами 1 и возвращает нам объект ostream, мы используем его для печати «Hello» (вызов < < (ostream &, символ *)) и снова возвращает ссылку на объект ostream поэтому мы используем его для печати 2.7 и так далее ...

  • выше линии можно перевести как:

    (((cout << 1) << "Hello") << 2.7) << endl; 
    
2

почему возвращаемый тип ссылка на выходной поток?

Возвращаясь ostream& делает возможным цепи его, как

std::cout << SON << SAT << MON << TUE << WED << THRUS << FRI; 

BTW: Output stream не должен (и не могут) быть скопированы, поэтому возвращать тип ссылка (а не по значению) ,

Смежные вопросы