Вопрос

Для того, чтобы использовать 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, и аргумент становится правой стороны. (Для двоичных операторов - унарных операторов работает аналогично.)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top