指一个名字,多种语义;
一个接口,多种方法
产生不同的动作。
在程序运行时的多态性通过继承和虚函数来体现;
在程序编译时多态性体现在函数和运算符的重载上
它提供了一种接口界面。
必须用基类指针调用派生类的不同实现版本
虚函数的作用:
允许在派生类中对基类的虚函数重新定义。
不能将类外的普通函数(友员)和静态成员函数声明成虚函数。
构造函数不能声明为虚函数!
数个数和类型全部与基类的虚函数完全相同。
否则不能实现多态性, 为函数重载.
如果没有对基类的虚函数重新定义,则派生类简单地继承其直 接基类的虚函数。
函数名、返回类型、 参数个数、 参数类型和顺序完全相同
如果派生类中对虚函数定义不同的参数,就无法实现多态机制。
如果函数原型不同,仅函数名相同,丢失虚特性
基类中的函数为 virtual void show() const,
派生类中的函数为void show (),
建立一个派生类对象时,必须从类层次的根开始,
沿着继承路径逐个调用基类的构造函数
虚析构函数用于指引 delete 运算符正确析构动态对象
在基类中为其派生类保留一个函数的名字,
以便派生类根据需要对它进行定义。
作为接口而存在
从基类继承来的纯虚函数,在派生类中仍是虚函数。
抽象类中不仅包括纯虚函数,也可包括虚函数。
但仍可使用指向抽象类的指针支持运行时多态性。
可以声明抽象类的指针和引用。
同的动作.
便于对问题抽象时定义共性,实现时定义区别 .
(4) 抽象基类是本类族的公共接口。
即从同一基类派生出的多个类有同一接口。
(5) 如果在基类声明了虚函数,则在派生类中凡是与该函数有相同的函数名、函数类型、参数个数和类型的函数,均为虚函数。