用c ++命名的vptr名称?

K.K*_*K.K 1 c++ virtual-functions

即使有很多关于如何在c ++中处理虚函数的文章,我也无法清楚一个基本的疑问.派生类的vptr变量是否被基类变量覆盖.ptr varible的名字也被破坏了吗?

Class Base
{
public:
    virtual void test();
};

class Derived 
{
public:
     virtual void test();
};
Run Code Online (Sandbox Code Playgroud)

如果我打电话

Base b = new Derived();
b->test();
Run Code Online (Sandbox Code Playgroud)

它转变为

(*b->vptr[<index>])(b);
Run Code Online (Sandbox Code Playgroud)

索引指向vtable条目.

我怀疑这个vptr是否也被命名为?

sla*_*ast 9

C++标准甚至不承认存在vptr多态类,因为它是一个实现细节,因此甚至不要求编译器以这种方式实现虚函数.所以不,vptr不是保留关键字(这是我认为你想要问的).