当前位置: 移动技术网 > IT编程>开发语言>C/C++ > c/c++ 继承与多态 友元与继承

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

2019年01月04日  | 移动技术网IT编程  | 我要评论

色哥哥电影院,黄冈房地产,陈翔q版图片

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网