c/c++ 继承与多态 友元与继承

问题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

1414315-20181106214320230-961379709.jpg

本人微信:xiaoshitou5854

转载于:https://www.cnblogs.com/xiaoshiwang/p/10208683.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值