1.面向对象的编程中,我们希望尽可能减少类之间的依赖行。这样能让类更加强健,更加容易维护。
但继承却与次背道而驰。
每个派生类十分依赖它的基类(或多个类),如果基类的接口发生改动,所以派生类都不得不为了适应基类的接口而改动。
(这是我们为什么总力争设计出几乎无需修改的基类)
2.动态绑定的开销。非虚方法在编译时绑定(即在编译时便已知被调用的函数),因此不存在运行时函数调用的相关开销;
C++中动态绑定的方法存在一项固定开销---通常是4-5条汇编语言指令。
包含虚函数声明的每个类对象都存在相关的大小开销。这项开销通常来源于一个额外的指针(C++中的vptr,本章稍后讨论)。
根据实现(和处理器),指针在32位机器上通常需要4个字节。因此,对象的大小以4字节递增。这种递增看起来无关紧要,
但它确实存在。这项开销在使用大量(成千上万)对象时便显而易见,这可能导致虚拟内存分页,从而影响了程序的性能;
对于大型项目而言,额外指针的开销几乎可以忽略不计。
3.软件的复杂性:
使用类层次和框架显然会增加系统的复杂程度。必须要充分理解,才能正确地使用它们。也就是说,使用它们增加了初学者的学习难度。
而且要设计这些层次也绝非易事。
但继承确实由很多好处,充分利用利完全大于弊
时间: 2024-10-10 08:03:29