问题1:类B是类A的友元类,类C是类B的友元类,那么类C是类A的友元类吗?函数fun是类B的友元函数,那么fun是类A的友元函数吗?
都不是,友元关系不能传递。
问题2:类B是类A的友元类,类C是类B的子类,那么类C是类A的友元类吗?
不是,友元关系不能继承。
问题3:类A_Fri是类A的友元类,类B是类A的子类,那么在类A_Fri的成员方法里,
(1)可以用类A的对象访问类A的私有成员吗?
(2)可以用类B的对象访问类B的私有成员吗?
(3)可以用类B的对象访问类A的私有成员吗?
(1)可以。因为A_Fri是类A的友元类。
(2)不可以。因为A_Fri不是类B的友元类。因此可以看出,友元关系不能继承。
(3)如果类B用public方式继承类A,答案是可以的。这一点比较怪,因为类B是public方式继承的类A,所以类B的对象里,类A的部分的成员属性没有变化。如果类B用非public方式继承类A,答案是不可以的。
class Base{
friend class Friend;
public:
void pub_mem();
protected:
int prot_mem;
private:
char pri_mem;
};
class D : public Base{
private:
int j;
};
class Friend{
friend class C;
friend void fri(Base& b);
int f(Base& b){
return b.pri_mem;//问题3的(1)
}
int f1(D& d){
//return d.j;//问题3的(2)
}
int f2(D& d){
return d.pri_mem;//问题3的(3)
}
};
class Bom : public Friend{
int mem(Base& b){
//return b.pri_mem;//问题2,友元关系不能继承。
}
};
void fri(Base& b){
//b.pri_mem;//问题1,友元关系不能传递
}
class C{
int f(Base& b){
//return b.pri_mem;//问题1,友元关系不能传递
}
};
int main(){
}
github
c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854