概述
为实现C++多态,C++使用了一种动态绑定技术,这个技术核心是虚函数表
类的虚表
一个类继承包含虚函数的基类,那么这个类也有自己的虚表。
虚表是一个指针数组,其元素是虚函数的指针,每个元素对应一个虚函数的函数指针,普通的函数即非虚函数,其调用不需要经过虚表。
虚表指针
续表是属于类的,而不是属于某个具体的对象。一个类只需要一个虚表。同一个类的所有对象都使用同一个虚表。
对象内部包含一个指向虚表的指针,用来指向自己的虚表。
动态绑定
对象的虚表指针用来指向自己所属类的虚表,虚表中的指针会指向其继承的最近的一个类的虚函数。
class A {
public:
virtual void vfunc1();
virtual void vfunc2();
void func1();
void func2();
private:
int m_data1, m_data2;
};
class B : public A {
public:
virtual void vfunc1();
void func1();
private:
int m_data3;
};
class C: public B {
public:
virtual void vfunc2();
void func2();
private:
int m_data1, m_data4;
};
image.png
文章参考: https://blog.youkuaiyun.com/primeprime/article/details/80776625
本文深入探讨了C++中实现多态性的关键机制——虚函数表。通过实例,详细解释了虚表的结构,虚表指针如何工作,以及动态绑定过程。了解这些底层原理对于掌握面向对象编程至关重要。
871

被折叠的 条评论
为什么被折叠?



