关于多重继承下的虚指针

yexianyi 2010-06-10 04:12:45
hi 各位专家,

我想请教一个关于虚指针的问题:
假设有class A,(内有虚函数)。Class B继承Class A。那么在这种情况下,类B的对象在被创建的过程中会包含一个虚指针指向虚表。
那么如果是在多继承情况下呢?比如,有Class A和B,(A、B中均含有虚函数)。 Class C继承Class A和B。此时,类C对象中应该包含几个虚指针呢?

Thanks
...全文
368 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2010-06-11
  • 打赏
  • 举报
回复
如果Inside The C++ Object Model也不愿意讨论的话(虽然我没看过)……
liutengfeigo 2010-06-11
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lvshaoqing 的回复:]

留个名字就可以了。 能回答这个问题的人,除了我,估计就只剩下小虫了。
[/Quote]

//确实....
lvshaoqing 2010-06-11
  • 打赏
  • 举报
回复
留个名字就可以了。 能回答这个问题的人,除了我,估计就只剩下小虫了。
悲剧哥 2010-06-11
  • 打赏
  • 举报
回复
一个。
BigCarrot 2010-06-10
  • 打赏
  • 举报
回复
http://www.codesourcery.com/public/cxx-abi/abi.html
liexinsuo 2010-06-10
  • 打赏
  • 举报
回复
帮顶,也自己可以学学
CGabriel 2010-06-10
  • 打赏
  • 举报
回复
fanster28_ 2010-06-10
  • 打赏
  • 举报
回复
多重继承还好,遭遇虚拟继承更复杂

测试你的编译器
#include <iostream>

struct A {
int a;
virtual void f(){}
};

struct PA : public A {
int pa;
virtual void g(){}
};

struct B {
int b;
virtual void x(){}
};

struct C : public A,public B {
int c;
virtual void y(){}
};

struct D : public A,virtual public B {
int d;
virtual void z(){}
};

int main()
{
using std::cout;
cout << sizeof(A) << " " << sizeof(PA) << '\n';
cout << sizeof(A) << " " << sizeof(B) << " " << sizeof(C) << " " << sizeof(D) << '\n';
}


看看MS是怎么做的:
8 12
8 8 20 24
cattycat 2010-06-10
  • 打赏
  • 举报
回复
这看你是什么继承了,如果是虚继承,复杂性更高,不同编译器不一样。
如果是public继承,那就是一个。
grimmchen 2010-06-10
  • 打赏
  • 举报
回复
这几天看的头大~~
ztenv 版主 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 taodm 的回复:]
不要去好奇连《深度探索C++对象模型》都不愿讨论的东西。
[/Quote]

不同的编译器真的有不同的实现方法,但基本上都能达到同样的效果——多态;
npuhuxl 2010-06-10
  • 打赏
  • 举报
回复
只有一个虚函数表的指针
taodm 2010-06-10
  • 打赏
  • 举报
回复
不要去好奇连《深度探索C++对象模型》都不愿讨论的东西。

65,184

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧