2017-01-01 44 views
1

我与朋友功能试验并写入以下内容:COUT如何调用类的私有成员

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

+3

cout << comp;'为'Comp'调用你的重载'operator <<'。由于该功能是“Comp”的“好友”,因此可以访问私有成员。尝试评论课堂中的“朋友”一行,看看会发生什么。 – Unimportant

回答

5

cout不能访问任何东西。

cout << comp; 

相当于

operator<< (cout, comp); 

,你已经定义了重载运营商作为一个朋友,所以它可以访问私有成员。

(重载运营商只是用特有的名称的功能。)

1

cppreference

您声明一个非成员函数。与此同时,您正在创建Comp类的功能朋友,因此它可以访问其私有成员。