码迷,mamicode.com
首页 > 编程语言 > 详细

c/c++ 继承与多态 继承中的public, protected, private

时间:2018-12-30 15:10:43      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:类继承   icp   com   原来   ima   访问   cti   方式   private   

问题:类B私有继承类A,类A有个protected成员,那么在类B的成员函数里是否可以使用类A的protected成员?

可以使用。

估计有的同学说不对吧,类B都私有继承了类A了,怎么还能访问类A的protect成员呢?请看下面的例子。在类Pri_derv的f()成员函数里是可以方位父类Base的pub_mem();和prot_mem;的。

class Base{
public:
  void pub_mem();
protected:
  int prot_mem;
private:
  char pri_mem;
};

class Pub_derv : public Base{
  int f(){
    pub_mem();
    return prot_mem;
  }
  //char g(){return pri_mem;}//error
};

class Pri_derv : private Base{
  int f(){
    pub_mem();
    return prot_mem;
  }
};

所以,子类不管是以什么方式继承父类,父类的public成员和protected成员在子类里永远都是可以访问的。

那么,public,protected,private继承都有什么用途呢?

控制它的子类,或者使用它的类,可以访问哪些成员变量。

  • public继承:原来父类的public,protected,private成员在子类里保持不变。
  • protected继承:原来父类的public成员在子类里变成protected的了,其余不变,所以,当别的类使用这个子类, 或者另一个类继承这个子类时候,这个子类的父类的public就不能被访问了。
  • private继承:原来父类所以成员在子类里都变成private的了,所以,当别的类使用这个子类, 或者另一个类继承这个子类时候,这个子类的父类的public就不能被访问了。

类Pri_derv私有继承Base,所以在Pri_derv的成员方法里是可以访问Base的public,protected成员的;但是Base的public,protected成员在类Pri_derv里已经是私有的了,所以当Pri_Pri_derv继承Pri_derv,在Pri_Pri_derv的成员方法里是不能再访问Base的public,protected成员。

class Base{
public:
  void pub_mem();
protected:
  int prot_mem;
private:
  char pri_mem;
};

class Pub_derv : public Base{
  int f(){
    pub_mem();
    return prot_mem;
  }
  //char g(){return pri_mem;}//error
};

class Pri_derv : private Base{
  int f(){
    pub_mem();
    return prot_mem;
  }
};


class Pub_Pub_derv : public Pub_derv{
  int f(){
    pub_mem();
    return prot_mem;
  }
  //char g(){return pri_mem;}//error
};

class Pri_Pri_derv : private Pri_derv{
  int f(){
    pub_mem();//error
    return prot_mem;//error
  }
};

c/c++ 学习互助QQ群:877684253

技术分享图片

本人微信:xiaoshitou5854

c/c++ 继承与多态 继承中的public, protected, private

标签:类继承   icp   com   原来   ima   访问   cti   方式   private   

原文地址:https://www.cnblogs.com/xiaoshiwang/p/10199447.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!