2012-08-25 30 views
1

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

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

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

如果我打电话

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

将其转换为

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

哪里指数点的V表项。

我的疑问是这个vptr的名字是否已经损坏?

回答

9

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

+0

我有这样的疑问,因为,如果它被初始化为基类对象指针派生类(在我的情况b),调用虚函数,它将使用vptr,它是基类vptr或子类vptr? –

+1

它是基类vptr(它也存在于所有派生类中)指向派生类的虚拟表。当然,所有这些都是依赖于实现的,所以你不能从你的C++代码访问它。 – slartibartfast

1

你也不会在C访问的vptr ++的语言意味着这样回答“不” - 没有这样的变量和名称,因此没有其重整:)

相关问题