【发布时间】:2017-01-01 10:44:08
【问题描述】:
我正在试验朋友功能并写了以下内容:
#include <iostream>
using namespace std;
class Comp {
private:
double r,i;
public:
Comp(){
r = 10.5;
i = 25.1;
}
friend ostream& operator <<(ostream& write, Comp & comp);
};
ostream& operator << (ostream& write, Comp& comp){
write << comp.r << ": " << comp.i;
return write;
}
int main(int argc, char const *argv[]) {
/* code */
Comp comp;
cout << comp;
return 0;
}
所以出现了一个问题(因为我不是 c++ 专家,刚开始学习 c++)为什么 cout 可以访问 Comp 类的私有成员。因为 cout 没有在类中声明,它也不是类的朋友。那么什么机制允许通过 ostream 类的对象 cout 访问类的私有成员。
基本上我想问的是其他类的对象(ostream 类 cout 的对象)如何在不成为类的朋友或成员的情况下访问其他类 Comp 的私有变量。 谢谢。
【问题讨论】:
-
cout << comp;将您的重载operator <<称为Comp。由于该函数是Comp的friend,它可以访问私有成员。尝试在课堂上注释掉friend行,看看会发生什么。