本文主要是介绍C++ 几句话彻底点通虚表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
#include <iostream>using namespace std;class Base
{
public:virtual void show() // 声明虚函数{cout << "Base" << endl;}
};class Derived : public Base
{
public:void show() override // 覆盖虚函数{cout << "Derived" << endl;}
};int main()
{Base *ptr = new Derived();ptr->show(); // 运行时解析 Q:为什么会输出 Derived ?delete ptr;return 0;
}
这里,调用ptr->show()
时的具体步骤为:
-
从
ptr
所指对象的内存开始处读取vptr(虚指针)
。 -
使用
vptr(虚指针)
访问虚表。 -
在虚表中查找
show()
函数对应的条目(因为Derived类
覆盖了Base类
的show()
,所以虚表里的指针指向Derived::show()
)。 -
调用该地址对应的函数(即
Derived::show()
)。
虚表使得C++中的多态成为可能,允许在运行时根据对象的实际类型调用适当的函数。
这篇关于C++ 几句话彻底点通虚表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!