оператор << перегрузка ostream - PullRequest
       12

оператор << перегрузка ostream

6 голосов
/ 03 декабря 2010

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

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

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

Спасибо

Ответы [ 3 ]

6 голосов
/ 03 декабря 2010

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

2 голосов
/ 03 декабря 2010

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

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

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

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

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

0 голосов
/ 03 декабря 2010

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

...