请教以下 基础问题

ostrich2fly 2006-11-10 10:14:34
#include <iostream>
#include <string>
using namespace std;


class B
{
public:
B();
~B();
virtual void a(){int b=0;};
virtual void D(){int C=0;};

protected:

private:
};

class C
{
public:
C();
~C();
virtual void a(){int b=0;};

protected:

private:
};

class D
{
public:
D();
~D();
protected:

private:
};
void main()
{

cout<<sizeof(B)<<endl;
cout<<sizeof(C)<<endl;
cout<<sizeof(D)<<endl;
}

输出是4,4,1 为什么会这样呢?
能详细解释一下么?谢谢
...全文
165 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangyangman 2006-11-10
  • 打赏
  • 举报
回复
恩 一个指针指向一个虚函数表,表中则有很多slot,每个slot用来存放virtual function的地址以及用来判断type的信息等等,
ostrich2fly 2006-11-10
  • 打赏
  • 举报
回复
阿,谢谢
是不是不管有几个virtual 函数都都只要有一个指向虚函数表的指针?
huangyangman 2006-11-10
  • 打赏
  • 举报
回复
一个类 求sizeof的时候什么占栈内存阿
--------------------------------
data member
当含有virtual keyword的时候,情况将会变复杂,你的编译器会做很多你不知道的事
如有兴趣,看看 <深度探索C++物件模型>
a_b_c_abc3 2006-11-10
  • 打赏
  • 举报
回复
B、C有个指向虚函数表的指针,所以是4字节
D是空类,但因为要使每个对象有个不同的地址,所以要分配一字节。
ostrich2fly 2006-11-10
  • 打赏
  • 举报
回复
一个类 求sizeof的时候什么占栈内存阿?
xtrvnnui 2006-11-10
  • 打赏
  • 举报
回复
哦,这样的啊!

64,654

社区成员

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

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