考虑virtual以外的实现
-
-
non-virtual-interface
-
Dase中调用virtual函数,Deried中重写virtual函数,调用实际由Base确定,实现由Deried确认
-
-
Function Pointer
-
函数指针作为类的成员变量,另外提供接口调用函数指针指向的函数
-
-
使用模板函数对象代替函数指针
-
将不同功能的函数设计在两个类中,实现成两种不同的继承体系
-
-
函数参数的缺省值是静态绑定的,virtual是动态绑定的,所以不要重新定义参数的默认值
-
可以使用NVI方式解决,no-virtual函数调用virtual函数,因为no-virtual函数绝对不能被掩盖,也就不会修改默认值
-
-
复合比继承扩张性更好
谨慎的使用private继承
-
-
能用复合就不用private,除非是特殊情况,Deried要继承Base中的protect成员
-
private继承可以节约内存
-
-
virtual继承会增加复杂度等成本
-
多重继承的使用场景:实现多个接口,继承一个基类
- 建议:不使用多继承,使用单继承和实现多接口