1

尽管有很多关于如何在 C++ 中处理虚函数的文章,但我无法清除一个基本疑问。派生类的 vptr 变量是否被基类变量覆盖。ptr 变量的名称是否也被破坏了?

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

class Derived 
{
public:
     virtual void test();
};

如果我打电话

Base b = new Derived();
b->test();

它转变为

(*b->vptr[<index>])(b);

index 指向 vtable 条目的位置。

我的疑问是这个 vptr 是否也名称损坏?

4

2 回答 2

9

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

于 2012-08-25T06:23:56.937 回答
1

您无法通过语言方式访问 C++ 中的 vptr,因此请回答“否” - 没有这样的变量和名称,因此没有它的修饰:)

于 2012-08-25T06:24:32.420 回答