【39】明智而审慎第使用private继承

探讨C++中复合与私有继承的区别,私有继承并非Is-A关系,不满足里氏替换原则,访问权限变为private。优先选择复合,除非需访问protected成员或重定义virtual方法。在特定情况下,如empty类,继承比复合更节省空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、private继承意味着,根据某物实现出,继承父类的实现,关闭父类的接口,并不是Is-A的关系,不满足里氏代换,继承的内容访问权限都修改为private。

2、那么问题来了,复合也表达根据某物实现出,那到底使用private继承还是复合呢?

3、优先使用复合,除非是下面的情况:a、使用对象的protected成员;b、想要重新定义virtual方法。

4、考虑下面的极端情况,有个empty类,占用空间大小为0,也就是说,没有字段和virtual方法,如果使用继承,子类大小不增加。如果使用复合,C++规定大小为0的独立对象,插入一个char到空对象,考虑到对齐,实际占用int。也就是说,在这种极端的情况下,继承比复合节省空间。对于空间格外重要的使用场景,需要考虑这种情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值