友元类和java的反射机制作用差不多,打破类的封装性。
#include "stdafx.h"
#include"iostream"
using namespace std;
class A {
private:
friend class B; //B类是A的友元,在B中可以访问A类的私有成员
friend void modifyA(A *pA, int _a);//友元函数
int x;
public:
int getX() {
return this->x;
}
};
class B {
public:
void set(int a) {
obj.x = a;
}
void print() {
cout << obj.x << endl;
}
private:
A obj;
};
void modifyA(A *pA, int _a) {
pA->x = _a;
}
int main()
{
B objB;
objB.set(100);//友元类修改私有属性
A objA; //创建一个A类对象,B类中也产生了A类对象
objB.print();
modifyA(&objA,12);//友元函数修改A对象的私有属性
cout << objA.getX()<< endl;
system("pause");
return 0;
}