Можно ли cout объект в C ++, как этот obj << cout << endl - PullRequest
0 голосов
/ 05 июня 2019

У нас был класс, где профессор попросил нас перегрузить ostream, чтобы напечатать объект таким образом (, сказав, что у нас есть объект t )

cout << t << endl;

Затем нас попросили наставитьтот же объект таким образом

t << cout << endl;

Как это работает и почему?

ostream& operator<<(ostream& o, T& t)
{
   return o << t.member;
}

// This is usual way and "normal" that I know about but won't work on both ways

Ожидаемый результат такой же, но второй способ сбивает с толку.Зачем кому-то хотеть его использовать?

1 Ответ

4 голосов
/ 05 июня 2019

Как может сказать любая хорошая книга или учебник, для любого оператора X выражение a X b будет (если найдена подходящая перегрузка) равным operatorX(a, b).

Или, если aa X b) перегружен оператор как функция-член, то он равен a.operatorX(b).

Если мы возьмем cout << t, это вызовет либо operator<<(cout, t) или cout.operator<<(t) в зависимости от типа t.

Как должно быть легко догадаться, изменение порядка на t << cout будет тогда operator<<(t, cout) или t.operator<<(cout).

...