2)同时会增加一个隐式的成员变量,用于存放虚表的地址,该变量称为虚函数表指针,简称虚指针(vptr); 3)所谓的虚函数覆盖,本质就是用子类中的虚函数的地址覆盖基类虚表中对应基类虚函数的地址 4)当编译器看到通过指针或引用调用虚函数时,不会直接生成函数调用的语句,而是用一段代码来替换该语句,这段代码在运行阶段被执行,完成如下功能: --》确定指针或引用的目标对象的真实类型,并找到虚指针 --》根据虚指针找到相应的虚函数表,并从中获取调用虚函数的入口地址 --》根据函数入口地址执行虚函数代码 这个函数绑定或称发生在程序的运行阶段,因此被称为动态绑定。
动态绑定对程序性能影响 1)动态绑定会增加内存开销 2)虚函数调用会增加时间的开销 3)虚函数不能被内联优化 注:如果没有多态的语法要求,最好不要使用虚函数 |
|