C++ Primer Plus 13章 类继承(2)
1.静态联编和动态联编
将源代码中的函数调用解释为执行特定的函数代码块被称为函数名联编。
而在编译过程中,编译器通过查看函数参数以及函数名确定使用哪个函数的过程称为静态联编。
在类的继承中,由于虚函数的存在,使得在编译器必须生成能够在哎程序运行时选择正确的虚方法的代码,这被称为动态联编。
C++中总是默认使用静态联编,这是因为静态联编的效率远高于动态联编,尤其是程序中不存在虚函数时。
虚函数工作原理
先给出一段包含虚函数的基类和派生类
class Scientist{
private:
...
char name[40];
public:
virtual void show_name();
virtual void show_all();
...
};
classs Phrsicist: public Scientist{
private:
....
char field[40];
public:
virtual void show_field();
void show_all();
};
编译器处理虚函数的方法是:给每个对象添加一个隐藏成员。隐藏成员中保存来一个指向函数地址数组的指针。这种数组称为虚函数表(vbtl)。
具体的原理可以看下面的图解
组的指针。这种数组称为虚函数表(vbtl)。
具体的原理可以看下面的图解