史上最简练的effective c++(条款32-40)

条款32-确定你的public继承模塑出is-a关系

dirived class is a based class.
确保public派生类具有基类的所有属性方法

条款33-避免遮掩继承而来的名称

derived class 的成员会覆盖based class 的成员,尽量避免,可以用using和转交函数让父类成员在子类可见

class Derived
{
	using Based::func;
	void func()
	{
		based::func();
	}
}

条款34-区分接口继承和实现继承

注意pure virtual,virtual函数的继承方式,对应的还有多态这一概念

条款35-考虑virtual函数以外的其它选择

  • 将virtual 置于private
  • function pointer或者function模板
  • 分离出一个类,形成另一个继承体系,易扩展

条款36-绝不重新定义继承而来的non-virtual 函数

既要符合is-a,也要保持based class成员的可见性

条款37-绝不重新定义继承而来的缺省参数值

为了运行期的效率,c++缺省参数是静态绑定,virtual函数是动态绑定,可能发生–调用derived class 的重写的virtual函数,却使用了基类的静态绑定的默认参数

条款38-通过复合塑模出has-a或“根据某物实现出”

不符合is-a关系是=时,利用复合完成has-a,一个类型拥有需要的另一个类型。

条款39-明智而审慎地使用private继承

private 继承不会实现derived 向based的类型转换,因为不符合is-a,逻辑上也不符。private继承意味着只有实现部分被继承,接口被忽略,尽量以复合替代private继承
python没有private这一概念

条款40-明智而审慎地使用多重继承

避免多个based 的成员冲突
多重继承正途:public继承接口类,private继承实现类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值