虚函数是怎么实现的
3 分钟阅读
•
458 字
+
276 词
参考答案
- 虚函数表的创建 : 当一个类包含虚函数时,编译器会自动为这个类创建一个虚函数表。这个表是一个函数指针数组,每个指针指向一个虚函数的实现。
-
虚函数表指针
: 编译器会在对象的内存布局中添加一个隐式的虚函数表指针(通常是一个指向
vtable的指针),这样每个对象都可以通过这个指针访问到类的虚函数表。 -
虚函数的声明
: 在类中声明虚函数时,可以使用
virtual关键字。如果一个函数被声明为虚函数,编译器会在类的vtable中为这个函数分配一个入口。 -
重写虚函数
: 当从基类继承并创建派生类时,可以在派生类中重写基类的虚函数。重写的函数会替换掉
vtable中对应的基类实现。 - 动态绑定 : 当通过基类指针或引用调用虚函数时,程序会使用对象的虚函数表指针来查找正确的函数实现。这个过程称为动态绑定或晚期绑定。
-
调用虚函数
: 程序运行时,当调用一个虚函数时,会先通过对象的虚函数表指针找到
vtable,然后在vtable中查找对应的函数指针,并调用该函数。