解决方案
20
面向对象编程讲究的是代码复用,继承和组合都是代码复用的有效方法。组合是将其他类的对象作为成员使用,继承是子类可以使用父类的成员方法。引用一个生动的比方:继承是说“本人父亲在家里给本人帮了很大的忙”,组合是说“本人请了个老头在本人家里干活”。
5
C++没有接口一说,接口是java
C++模访接口
#if _MSC_VER > 1300
#define _declareInterface(X) class __declspec(novtable) X{ public: virtual ~X()=0{}
#define _endDeclare };
#endif
或,参考wtl 编译多态 接口, 需要很深的模板元编程功底
C++模访接口
#if _MSC_VER > 1300
#define _declareInterface(X) class __declspec(novtable) X{ public: virtual ~X()=0{}
#define _endDeclare };
#endif
或,参考wtl 编译多态 接口, 需要很深的模板元编程功底
25
普通继承情况下,继承比起组合只是,子类可以隐式转换成父类引用,原因是继承有效的根本就是能够使用父类的地方都能够使用子类,和operator T不同的是这种转换在何时都能生效,这就是为什么子类能调用父类的成员函数
虚继承的情况下,组合要实现继承的效果相当复杂,你可以查看虚继承的内存布局
虚函数的情况下,组合只需要在本人的构造函数中更新父类的虚函数表就能实现多态
假如只是存在一级继承,使用组合也无妨,但多重继承会让问题变得很复杂
虚继承的情况下,组合要实现继承的效果相当复杂,你可以查看虚继承的内存布局
虚函数的情况下,组合只需要在本人的构造函数中更新父类的虚函数表就能实现多态
假如只是存在一级继承,使用组合也无妨,但多重继承会让问题变得很复杂