44、动态联编与静态联编
在 C++ 中,联编是指⼀个计算机程序的不同部分彼此关联的过程。按照联编所进⾏的阶段不同,可以分为静态联编和动态联编;
静态联编是指联编⼯作在编译阶段完成的,这种联编过程是在程序运⾏之前完成的,⼜称为早期编。要实现静态联编,在编译阶段就必须确定程序中的操作调⽤(如函数调⽤)与执⾏该 操作代码间的关系,确定这种关系称为束定,在编译时的束定称为静态束定。静态联编对函数 的选择是基于指向对象的指针或者引⽤的类型。其优点是效率⾼,但灵活性差。
动态联编是指联编在程序运⾏时动态地进⾏,根据当时的情况来确定调⽤哪个同名函数,实际 上是在运⾏时虚函数的实现。这种联编⼜称为晚期联编,或动态束定。动态联编对成员函数的 选择是基于对象的类型,针对不同的对象类型将做出不同的编译结果。
C++中⼀般情况下的联编是静态联编,但是当涉及到多态性和虚函数时应该使⽤动态联编。动 态联编的优点是灵活性强,但效率低。动态联编规定,只能通过指向基类的指针或基类对象的 引⽤来调⽤虚函数,其格式为:指向基类的指针变量名->虚函数名(实参表)或基类对象的引⽤名.虚函数名(实参表
实现动态联编三个条件:
必须把动态联编的⾏为定义为类的虚函数;
类之间应满⾜⼦类型关系,通常表现为⼀个类从另⼀个类公有派⽣⽽来;
必须先使⽤基类指针指向⼦类型的对象,然后直接或间接使⽤基类指针调⽤虚函数;
Last updated