读书人

虚函数表有关问题

发布时间: 2012-09-08 10:48:07 作者: rapoo

虚函数表问题
#include <iostream>

class Base
{
public:
virtual void foo() {}
};

class D1: public Base
{
public:
virtual void foo1() {}
};

class D2: public D1
{
public:
virtual void foo2() {}
};


int main(int argc,char *argv[])
{
D2* d = new D2;

int i = sizeof(*d);
return 0;
}

这样多层继承后 在VS环境下 只有Base的vptr 虚函数表中只有Base::foo() 是因为编译器不同行为不同吗? 谢谢解答!

[解决办法]
子类添加了什么东西,父类不知道
[解决办法]
如果要看更细节的东西,建议看看 深度搜索c++对象模型。

[解决办法]
1. vtable和vptr不是必须的,不属于标准的一部分,尽管大部分编译器都有vtable和vtpr
2. 一般来说, vtable在编译的时候就确定了,每一个带有虚函数的类有且仅有一个vtalble,类似于类的static 成员,所以Base的vtable当然只有Base::foo。
3. 一般来说, vptr,属于对象,在运行时确定。 每一个对象可以有一个以上的vptr。

读书人网 >C++

热点推荐