C++虚函数与多态
1.两种联编
联编就是将模块或者函数合并在一起生成可执行代码的处理过程,同时对每个模块或者函数调用分配内存地址,并且对外部访问也分配正确的内存地址,它是计算机程序彼此关联的过程。
静态联编是指在编译阶段就将函数实现和函数调用关联起来,在编译阶段就必须了解所有的函数或模块执行所需要检测的信息,它对函数的选择是基于指向对象的指针(或者引用) 的类型,编译器对非虚方法使用静态联编。
动态联编是指在程序执行的时候才将函数实现和函数调用关联,动态联编对函数的选择不是基于指针或者引用,而是基于对象类型,不同的对象类型将做出不同的编译结果,编译器对虚方法使用动态联编。
2.实现动态联编的三个条件:
① 必须把动态联编的函数定义为类的虚函数。
② 类之间应满足子类型关系,通常表现为一个类从另一个类公有派生而来。
③ 必须先使用基类指针指向子类型的对象,然后直接或者间接使用基类指针调用虚函数。