c/c++ 继承与多态 友元与继承
程序员文章站
2022-05-18 22:23:35
问题1:类B是类A的友元类,类C是类B的友元类,那么类C是类A的友元类吗?函数fun是类B的友元函数,那么fun是类A的友元函数吗? 都不是,友元关系不能传递。 问题2:类B是类A的友元类,类C是类B的子类,那么类C是类A的友元类吗? 不是,友元关系不能继承。 问题3:类A_Fri是类A的友元类,类 ......
问题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(){ }