class A
{
int a;
friend class B;
public:
A (int x=0):a(x){};
void show()
{cout<<a;}//这个函数是比较必要的,避免了重载运算符<<的麻烦
};
class B
{
A *b;
public:
B(A* a):b(a) {}
A &getA(int n)
{
return b[n];
}
};
void main()
{
A a[3]={};
B b(a);
b.getA(1).show();//**A** 这里虽然A就是一个int型,但如果cout<<A的话是不行的
}
因为b的成员b (*A)是私有的,所以如果A行这样写
b.b[1].show();
会显示无访问权限
这种方法提供了
通过派生类B的对象b以引用的方式访问b的私有成员A* a
(引用的重点:可以进一步通过引用调用b[n](注:为A类)调用其公有成员函数)