任务:虚函数与多态性
联编:程序自身彼此关联的过程,将模块或者函数合并在一起
静态联编:在程序开始运行之前的编译期间确定函数的调用地址,并生成代码
动态联编:在程序运行时进行联编(需依靠虚函数)
虚函数:
在类中被声明为virtual的非静态成员函数,用virtual说明函数的虚特性
虚函数具有遗传性,基类中的虚函数继承到派生类中仍然是虚函数
不能将构造函数定义为虚函数,但可以将析构函数定义为虚函数
类体中定义:
virtual 函数类型 函数名(形参列表)
{
函数体
}
或
virtual 函数类型 函数名(形参列表);//类体中说明
函数类型 类名::函数名(形参列表)
{
函数体
}//类体外定义
多态性:
发出同样的消息,被不同类型的对象接受时,可能导致不同的行为
函数重载,运算符重载,两种属于静态联编
在编译时绑定函数调用的入口地址,称为编译多态性或静态多态性
动态多态性属于动态联编,通过基类的指针或引用调用函数实现
调用的一般格式:
基类指针变量名-.虚函数名(实参列表)
或
基类对象引用名.虚函数名(实参列表)
基类指针指向派生类对象时,
如果指针所调用的函数是虚函数,则调用派生类中新增的函数;
指针所调用的函数是非虚函数,则调用从基类继承来的函数;