多态特性详见 C++面向对象的三大特性。
动态多态通过虚函数实现。
虚函数virtual
虚函数的用途:
如果希望派生类可以重新定义基类的方法,则可以使用关键字virtual将它声明为虚的。这样对于通过基类指针或引用访问的对象,能够根据对象的类型来调用,而不是根据指针或引用的类型来处理。
示例:
假设要创建一个数组来保存基类对象和派生类对象,但数组中所有元素的类型必须是相同的。可以创建指向基类的指针数组,这样,每个元素的类型都相同,但由于使用的是公有继承类型,所以指针既可以指向基类对象,也可以指向派生类对象。
virtual与引用、指针的多态特性
如果方法是通过引用或指针调用的:
- 没有使用关键字virtual:程序将根据引用类型或指针类型选择方法;
- 使用了virtual:程序将根据引用或指针指向的对象类型选择方法。
虚函数表
虚函数表是一个数组,表中存储了为类对象进行声明的虚函数的地址。
编译器处理虚函数的方法是,为每个对象(如下一段叙述)添加一个隐藏的指针成员,指向虚