gpt4 book ai didi

c++ - C++中Vptr和Vtable的机制

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:42 25 4
gpt4 key购买 nike

在 C++ 中,在动态绑定(bind)期间,请考虑以下示例...

class Base
{
virtual void fun()
{
cout<<"Base";
}
};

class Derived : public Base
{
void fun()
{
cout<<"Derived";
}
};

int main()
{
Base *bptr;
Derived d;
bptr=&d;
bptr->fun();
}

由于虚拟关键字/动态绑定(bind)的声明,上述函数的输出是“派生的”。

根据我的理解,将创建一个虚拟表 (Vtable),其中包含虚拟函数的地址。在这种情况下,为派生类创建的虚拟表指向继承的虚拟 fun()bptr->fun() 将解析为 bptr->vptr->fun();。这指向继承的基类函数本身。派生类的函数是怎么调用的我不是很清楚?

最佳答案

刚刚浏览了这个链接 virtual table and _vptr

它说工作流程会像..

  1. base_ptr->base_vptr---->检查基类虚函数的访问。

  2. base_ptr->derived_vptr->virtual_function()--->调用/调用虚函数。

因此调用了派生类的虚函数。希望对你有所帮助。

关于c++ - C++中Vptr和Vtable的机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19224126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com