为实现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.csdn.net/primeprime/article/details/80776625