11.2.3 引用访问

    使用引用访问虚函数,与使用指针访问虚函数类似,不同的是引用已经声明,不能修改,因此在使用上有一定限制,但这在一定程度上提高了代码的安全性,特别体现在函数参数传递等场合中,可以将引用理解成一种“受限制的指针”,如代码11.4所示。

    代码11.4 使用引用访问虚函数CallVirtualFuncByRef


    <—————————————文件名:example1104.cpp—————————————-> 01 #include"classdef.h" 02 int main() 03 { 04 base obj_base;//创建基类对象 05 child obj_child;//创建派生类对象 06 base&rBase1=obj_base;//声明基类引用,用基类对象初始化 07 rBase1. disp();//基类引用调用虚函数,基类中的disp版本 08 base&rBase2=obj_child;//声明基类引用,用派生类对象初始化 09 rBase2. disp();//基类引用调用虚函数,派生类中的disp版本 10 return 0; 11 }

    输出结果如下所示。


    hello,base hello,child

    【代码解析】从代码11.4可以看出,使用引用访问虚函数同样与引用类型无关,只取决于引用初始化的对象,如代码第9行,是基类引用调用虚函数,派生类中的disp版本。因此,通过引用访问虚函数时,编译器会进行动态联编处理。