COUT如何打电话给班级的私人成员

how cout can call the private members of a class

本文关键字:成员 打电话 COUT      更新时间:2023-10-16

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

#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 Comp的私人成员。因为在班上没有声明COUT,它也不是班级的朋友。因此

基本上我要问的是其他类(Ostream类Cout的对象)的对象如何访问其他类Comp的私人变量而不是类的朋友或成员。谢谢。

cout无法访问任何东西。

cout << comp; 

等于

operator<< (cout, comp);

您已经将超载运算符定义为朋友,因此它可以访问私人成员。

(超载运算符只是具有特殊名称的功能。)

请参阅cppreference

您正在声明非会员功能。同时,您正在建立Comp类的功能朋友,因此它可以访问其私人成员。