Оператор << Перегрузка Orstream
-
30-09-2019 - |
Вопрос
Для того, чтобы использовать Cout как таковую: STD :: Cout << myObject, почему мне нужно пройти объект Ostsream? Я думал, что это неявный параметр.
ostream &operator<<(ostream &out, const myClass &o) {
out << o.fname << " " << o.lname;
return out;
}
Спасибо
Решение
Вы не добавляете другой элемент-функцию для ostream
, так как это потребует переопределения класса. Вы не можете добавить его в myClass
, поскольку ostream
идет первым. Единственное, что вы можете сделать, это добавить перегрузку в независимую функцию, которая вы делаете в примере.
Другие советы
Только если это член элемента класса, который в противном случае был бы первым аргументом. Таким образом, это было бы:
class ostream {
...
ostream &operator << (const myClass &o);
...
};
С ostream
Был записан задолго до вашего класса, вы видите проблему получить там ваш класс. Таким образом, мы должны реализовать оператора как отдельно стоящую функцию:
(return type) operator << ( (left hand side), (right hand side) );
Когда операторы реализуются как функции членов классов, левая сторона this
, и аргумент становится правой стороны. (Для двоичных операторов - унарных операторов работает аналогично.)
Поскольку вы перегружаете бесплатную функцию, а не функцию элементов.