按C++标准,多态类型就是带有虚函数的类类型。从设计角度看,多态对象就是一个具有不止一种类型的对象。而多态基类则是一个为满足多态对象的使用需求而设计的基类。
一个良好设计的多态类对于它的每个基类而言必须是可替换的。
可将多态基类看成一份契约,这个基类对其接口的用户做了某些承诺,这些承诺包括郑重的语法承诺,即特定的成员函数可以通过一些特定类型的实参进行调用,以及不太容易验证的语义上的承诺,即当一个特定的成员函数被调用时将会发生什么实际情况。
原则上,基类可以不知道除自身以外的事物,从实践角度来看,对其接口的设计要考虑预期用户的需求,并且应该以这样的方式进行设计:派生类可以很容易的推知并实现其契约。然而,基类应该对其派生类的具体细节全然不知,因为知道这些会不可避免的致使在类层次结构上添加或删除派生类变得困难。