6

为了像这样使用 cout:std::cout << myObject,为什么我必须传递一个 ostream 对象?我认为这是一个隐含的参数。

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

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

谢谢

4

3 回答 3

6

您没有向 中添加另一个成员函数ostream,因为这需要重新定义类。您不能将其添加到myClass,因为ostream先行。您唯一能做的就是向独立函数添加重载,这就是您在示例中所做的。

于 2010-12-03T16:53:58.660 回答
2

仅当它是类的成员函数时,否则它将是第一个参数。因此,它将是:

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

因为ostream是在你上课之前很久写的,你会看到让你的课在那里的问题。因此,我们必须将运算符实现为独立函数:

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

When operators are implemented as member-functions of classes, the left hand side is this, and the argument becomes the right hand side. (For binary operators - unary operators work similarly.)

于 2010-12-03T16:55:53.023 回答
-1

因为您正在重载自由函数,而不是成员函数。

于 2010-12-03T16:54:34.657 回答