2010-12-03 6 views
5

Чтобы использовать cout как таковой: std :: cout < < myObject, почему мне нужно передать объект ostream? Я думал, что это неявный параметр.оператор << перегрузка ostream

ostream &operator<<(ostream &out, const myClass &o) { 

    out << o.fname << " " << o.lname; 
    return out; 
} 

Благодаря

ответ

5

Вы не добавляете другой функции члена в ostream, так как это потребует пересмотра класса. Вы не можете добавить его в myClass, так как сначала начинается ostream. Единственное, что вы можете сделать, это добавить перегрузку в независимую функцию, что вы делаете в этом примере.

+0

+1 для хорошего вывода о том, что было недосказанным в вопросе – 2010-12-03 20:38:43

-1

Потому что вы перегружаете свободную функцию, а не функцию-член.

2

Только если это функция-член класса, которая в противном случае была бы первым аргументом. Таким образом, было бы:

class ostream { 
    ... 
    ostream &operator << (const myClass &o); 
    ... 
}; 

С ostream было написано задолго до вашего класса, вы видите проблему получения вашего класса там. Таким образом, мы должны реализовать оператор в качестве автономной функции:

(return type) operator << ((left hand side), (right hand side)); 

Когда операторы реализуются в виде членов-функций классов, левая рука this, и аргумент становится правая рука. (Для двоичных операторов - унарные операторы работают аналогично.)

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