friend ostream& operator<<(ostream& os, MyClass& obj);我有几个问题:
发布于 2011-05-27 00:24:37
MyClass&中的&使函数接受对MyClass对象的引用,而不是对象本身。(其他的也是如此。)
引用是轻量级的,可以传递,您对obj所做的任何更改都会影响原始对象。如果没有&,您将指示编译器在调用中构造一个全新的MyClass,在返回时销毁它,并丢弃您可能对其内部状态所做的任何更改。
ostream&的返回值通常用于返回相同的ostream&它被传入,这样您就可以编写像cout << "hello " << 42 << endl;这样的移动链,并让它们按照您期望的方式运行。(您可以让它返回一些不同的东西- C++很容易完全打乱人们的期望-但不要这么做。)
发布于 2011-05-27 00:49:06
。为什么我需要写“朋友”?
ostream改变了左参数(改变了流的状态),因此根据通用运算符重载语义,它应该作为左操作数类型的成员来实现。然而,它的左操作数是来自标准库的流,当你为自己的类型实现输出和输入操作时,你不能改变标准库的流类型。这就是为什么你需要为你自己的类型实现这些运算符作为非成员函数。
https://stackoverflow.com/questions/6141695
复制相似问题