cout如何调用类的私有成员

时间:2017-01-01 10:44:09

标签: c++ oop g++

我正在尝试使用朋友功能并编写以下内容:

#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的私有变量而不是该类的朋友或成员。 感谢。

2 个答案:

答案 0 :(得分:5)

cout无法访问任何内容。

cout << comp; 

相当于

operator<< (cout, comp);

并且您已将重载的运算符定义为朋友,因此它可以访问私有成员。

(重载运算符只是具有特殊名称的函数。)

答案 1 :(得分:2)

请参阅cppreference

您正在声明非会员功能。与此同时,您正在成为班级Comp的该职能朋友,因此可以访问其私人成员。