显式地允许一个不属于当前结构的一个成员函数访问当前结构中的数据—— 可以在此结构内部声明这个函数为友元 friend.
Attention:必须在结构内声明,这一点很重要,因为编译器必须读取这个结构的声明以理解这个数据类型的规则。
1 #include <iostream>
2 using namespace std;
3 struct X;
4 struct Y{
5 public:
6 int fg(const X& x);
7 };
8
9 struct X{
10 private:
11 int i;
12 public:
13 void initialize();
14 int fg(const X&);
15 friend int fg(const X&);
16 friend int Y::fg(const X&);
17 };
18
19
20 void X::initialize(){i = 100;}
21 int X::fg(const X& x){return 100 *i;}
22 int Y::fg(const X& x){return 300 *x.i;}
23 int fg(const X& x){
24 return 200 * x.i;
25 }
26
27 int main(){
28 X x;
29 x.initialize();
30 cout<< x.fg(x)<<endl;
31 cout<<fg(x)<<endl;
32 Y y;
33 cout<<y.fg(x)<<endl;
34
35
36 return 0;
37 }
38
C++ 并不是完全的面向对象的语言,而是一个混合产品。