1.什么是友员?
在类中通过声明 friend class 类名 成员友员。
例如:
class A {
private:
void show() {qDebug() << "this is test A";}
QString m_testA;
};
class B {
void show() ;
QString m_testB;
friend class A;}
我们可以看到类B中声明了A为B的友员。
2.友员的作用
当一个类中声明另一个类为友员,那个被声明的友员类是可以访问来声明的这个类的私有类数据和成员。
上例中:
在A类成员函数中:
可以作用:
void A::show() {
B b;
b.show() ;
b.m_testB;
}
这是可以通过编译的,也是正确的。
3.友员的访问权限
当A为B的友员时, A是可以访问B类的, 而B类是不可以访问A类的。 当然为什么这样,这是标准定的, 所以记住就行了。 好记,形象一点地可以这么理解:
B 对A 说,你是我的朋友,我既然把你当朋友了,我的什么私有的东西,就不封装了, 你可以直接用。
而A则嘴上答应好,而心想B就是憨,我就不会把什么给B看, 所以, B中声明A为友员, A是可以访问B的私有数据和私有成员函数,但B则不可以访问A;
当然AB互相声明为友员, 则可以相互访问对方的私有数据成员和函数。
另外一种
A 是 B 友员, B 是C 的友员 则有 A 可以访问B的私有 , B 可以访问C的私有, 但A不可以访问C的私有;
就可理解为我朋友的朋友,跟我不一定是朋友。