首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

虚函数表有关问题

2012-09-08 
虚函数表问题#include iostreamclass Base{public:virtual void foo() {}}class D1: public Base{publi

虚函数表问题
#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。

热点排行