private继承的特点和意义以及何时使用

private继承的特点和意义

private继承导致的结果

  1. 基类中的所有成员都会变成private;
  2. 如果是private继承,则**不会自动将派生类类型转换为基类类型(不会自动转换,但是可以手动显式进行转换),不能隐式转换**;

private继承的意义

不同于public继承是表示子类与基类之间的’is-a’关系,private并不象征着类之间的’is-a’关系。

private继承意味着“子类根据基类的实现而得到”。(implemented-in-terms-of,根据基类实现出子类)

由于private继承将基类的所有public都改为private,因此,可以将private继承视为继承子类的实现而略去子类的接口(因为子类的接口由于private的原因不能再被调用者调用,相当于接口被取消),接口指一个class内的public方法。

什么情况下该/不该使用private继承

由于private就是将一个类(基类)作为另一个类(子类)的一部分实现内容,即用基类来实现子类,它与对象之间的复合/包含关系很像,因此需要明确它们的异同点并考虑替代。
复合/聚合关系:即一个类包含另一个类,如在class Foo中定义一个成员,其类型是另一个类,这两个类之间就是复合关系。

使用private继承来代替复合的情况

  1. 存在protected成员的时候,使用private继承和使用复合的结果是不同的:复合后一个类仍然不能使用另一个类的protected成员;而private继承可以。
  2. 存在virtual成员的时候:复合与private继承的结果也不同。

尽量使用复合而必要的时候才使用private继承

总结:什么时候使用private继承比复合更好

  1. 当你希望访问protected接口的时候,使用private继承比复合更好,因为private继承能够提供访问权限;
  2. 当你希望override它的virtual函数的时候,使用private继承更好,因为继承能够提供override。
  3. 除此之外一般来说,使用复合比使用private继承更好。
  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值