C++ 友元函数和友元类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class A{
// 定义友元函数
// 友元函数只是声明,实现将在类外进行
// 必须传递本类的指针作为参数
friend void accessI(A*p, int a);

// 定义B为友元类,这样B中就可以修改A的私有成员
friend class B;
private:
int i;

public:
void printI(){
cout << i << endl;
}
};

class B{
private:
A a;
public:
void modifyA(){
// B是A的友元类,可以修改A的私有成员
a.i = 10;
}
};

void accessI(A*p, int a){
p->i = a;
}

void main(){
A a;
accessI(&a, 100);
a.printI();

system("pause");
}

在Java中,我们可以通过Class.forName(“com.xxx.xx”)的形式,获取到任何类,并且能够通过
Class访问对应类的任何属性,也就是说,Class实际是Java中所有类的友元类(Java底层是用C和C++实现的)。