C++ 3种继承方式访问属性汇总

总的规律:

1.从父类继承过来的访问属性,取决于父类的继承方式 , 加成员本身的访问属性
2.访问属性,按照访问范围从大到小: public > protected > private .访问属性 = 父类继承方式,和 属性在父类本身的访问属性 最小的访问属性
具体举例只有下面3种组合:

  • public + private = private
  • public + protected = protected
  • protected + private = private

概念总结看着比较拗口,直接看下面代码举例

c++中 class 默认继承是private继承 ,struct 默认是public继承,一般开发全用public继承,方便阅读

代码举例

#include <iostream>
using namespace::std;
class Person{
public:
    string name;
private:
    void showPerson(){
        cout << "showPerson()" <<endl;
    }
protected:
    void showName() {
        cout << "name=" << name <<endl;
    }
};
//下面代码是儿子类的继承
//Student1,2,3分别按照public , private ,protected 3种方式继承

下面代码是儿子类的继承
Student1,2,3分别按照public , private ,protected 3种方式继承

class Student1: public Person{
    
};
class Student2:private Person{
    
};
class Student3:protected Person{
    
};

孙子类的继承,全用public为了保持父类的访问属性,方便测试结果

class Pupil1:public Student1{
    
};
class Pupil2:public Student2{
    
};

class Pupil3:public Student3{
    
};

上面代码 Person 里面有 个 3 访问等级的,分别 public: name , private: showPerson() protected showName()
下面的调用代码,为了让代码能运行 不能访问的已经用//注释掉了.注意后面的//注释说明,说明了,为什么不能访问

int main(int argc, const char * argv[]) {
    Student1 s1 = Student1();
    s1.name;
    //s1.showPerson(); //private不能在外面访问
    //s1.showName();    //protected不能在外面访问
    
    Student2 s2 = Student2(); //private继承,所有成员都是private ,继承以后的访问属性变成:继承属性和父类属性最小的访问等级
    //下面4个都变成了private,所以都不访问.
    //    s2.name;
    //    s2.showName();
    //    s2.showPerson();
    
    Student3 s3 = Student3();
    //    s3.name;//protected不能访问
    //    s3.showPerson();//private不能访问
    //    s3.showName();//protected不能访问
        //规律访问属性,取决于,上一级父类的继承方式,和成员本身访问属性
    //下面孙子类的,因为儿子类继承Person以后已经把访问属性改变了
    Pupil1 p1 = Pupil1();
    Pupil2 p2 = Pupil2();
    Pupil3 p3 = Pupil3();
//    p1.name;//public 可以访问
//    p1.showName();//protectd不能访问
//    p1.showPerson();//private不能访问.
//
//    //父类Student2是private继承,所以父类属性全变成了private
//    p2.name;//private不能访问.
//    p2.showName();//private不能访问.
//    p2.showPerson();//private不能访问.
    
    //父类Student3是protected继承,所以父类属性全变成了protected
//    p3.name;//protectd不能访问
//    p3.showName();//protectd不能访问
//    p3.showPerson();//protectd不能访问
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值