多态
多态性是不同的对象调用相同名称的函数,并可导致完全不同的行为的现象。“同一接口,多种方法”。
多态包括编译时多态(通过函数重载或运算符重载实现)和运行时多态(通过类的继承关系和虚函数实现)。
在基类中用关键字virtual修饰的成员函数称为虚成员函数,可以从基类继承。
如果虚函数在类声明之外定义,关键字virtual仅在函数声明时需要,不需再函数定义中使用该关键字。顶层函数不能为虚函数。
多态条件:
-必须存在一个继承体系结构。
-继承体系结构中的一些类必须具有同名的虚函数成员(当声明了基类的一个成员函数为虚函数后,即使该成员函数没有在派生类中被显式地声明为虚函数,但它在所有派生类中也将自动成为虚函数)。
-至少有一个基类类型的指针或基类类型的引用。这个指针或引用可用来对虚成员函数进行调用。(基类类型的指针可以指向任何基类对象或派生类对象)
C++使用vtable(虚成员函数表)来实现虚成员函数的运行期绑定。
构造函数不能使虚成员函数,析构函数可以使虚成员函数。