protect 继承_C++ public private protect 继承关系(链接)

总结:  public继承基类成员访问权限没有变化;

protected继承基类public和protected权限变为protected,基类private不变。

private继承基类public和protected权限变为private,基类private不变,所以,在私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承。

(根据派生类继承的方式,可推导派生类向基类转换时用户代码和成员函数和友元函数的可访问性)

1.public继承基类,派生类成员和友元都可以访问,(Base* B=new Diveration)用户代码,相对基类可以看到子类从基类继承的部分有public成员可访问;

2.任何继承方式,派生类成员和友元都可以访问,用户代码根据继承区别;

3.public&protected继承基类,派生类的派生类成员和友元都可以访问,而private继承不可访问(都变成派生类的私有了,不管你派生类的派生类怎么继承都是不可见的)

1 classBase2 {3 public:4 virtual void Try() const =0;5

6 intpublic_int;7 protected:8 intprotected_int;9 private:10 intprivate_int;11 };12

13

14 //继承改变的是public&protected15 //private属于基类

16 class DiverA : publicBase17 {18 public:19

20 //不管什么继承内部只有基类的public&protected可访问(任何继承public&protected的变化对于派生类都可见)

21 void Try() const override

22 {23 std::cout << public_int <<:endl std::cout protected_int private_int std::endl>

26 }27

28 };29

30 int main(int argc, char *argv[])31 {32

33 Base *B = newDiverA;34 B->Try();35 B->public_int; //相对基类,派生类继承public区对基类可见而protected区和private区相对不可见;36 //其他继承可以推导

37

38 return 0;39 }

可以通过using声明改变继承变量的权限(原private除外,虽然继承但是还是属于基类私有)

注意:派生类只能为那些它能访问到的成员提供using

1 //基类

2 classBase3 {4 public:5 intpublic_int;6 protected:7 intprotected_int;8 private:9 intprivate_int;10 };11

12

13 //派生类

14 class DiverA : privateBase15 {16 public:17 //通过using改变继承权限,用户代码也改变

18 usingBase::public_int;19 usingBase::protected_int;20 };21

22 //派生类的派生类

23 class DiverA_Diver : publicDiverA24 {25

26 };27

28 int main(int argc, char *argv[])29 {30

31 //普通代码

32 DiverA_Diver A;33 A.protected_int;34 A.public_int;35

36 //普通代码

37 DiverA B;38 B.public_int;39 B.protected_int;40

41 //用户代码(派生类向基类转换,权限改变了)

42 DiverA *base = newDiverA_Diver;43 base->protected_int;44 base->public_int;45

46 return 0;47 }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值