有时候希望同一个方法在派生类和基类中的行为是不同的。换句话说,方法的行为取决于调用该方法的对象。这种较复杂的行为称为多态——具有多种形态。即同一种方法其行为随上下文而异。有两种重要的机制可用于实现多态公有继承:
在派生类中重新定义基类的方法。
使用虚方法。
如果要在派生类中重新定义基类的方法,通常应将基类方法声明为虚的。这样,程序将根据对象类型而不是引用或指针的类型来选择方法版本。为基类声明一个虚析构函数也是一种惯例。这样做是为了确保释放派生对象时,按正确的顺序调用析构函数。注意virtual只用在声明中,不能用在定义中。
虚方法的演示:
假设要同时管理Brass和BrassPlus账户,如果能使用同一个数组来保存Brass和BrassPlus对象,将很有帮助。这是可能的使用指向Brass类型的指针,就能保证这个数组来表示多种类型的对象,又保证数组的元素都是同一种类型的。这样由于使用的是公有继承模型,因此Brass指针既可以指向Brass对象,也可以指向BrassPlus对象。
为何要使用虚析构函数:
如果析构函数不是虚的话,则将只调用对应指针类型的析构函数。
虚方法就是给引用或指针调用对象时根据对象的类型确定调用哪个方法而设计的。不加virtual的话,就会根据引用或指针的类型调用方法了,这就容易造成一些问题。