我是新来的C++编程,在下面的代码中我使用虚拟继承,所以派生类的大小显示24个字节,但我没有得到它是如何,所以请帮助我究竟是如何。派生类的大小
#include "stdafx.h"
#include <iostream>
using namespace std;
class BaseClass
{
private : int a, b;
public :
BaseClass()
{
a = 10;
b = 20;
}
virtual int area()
{
return 0;
}
};
class DerivedClass1 : virtual public BaseClass
{
int x;
public:
virtual void simple()
{
cout << "inside simple" << endl;
}
};
int main()
{
DerivedClass1 Obj;
cout << sizeof(Obj) << endl;
return 0;
}
在这种情况下,虚拟继承不起任何作用。当存在钻石形状的继承模式时,通常使用虚拟继承 - 继承B和C,B和C都继承D.如果B和C都使用虚拟继承继承D,则A仅继承D的一个共享“副本” - 否则它继承了D的两个单独的“副本”。这里只有一个基地,只能通过一条路线继承,所以不可能共享基地。即使在没有直接指向的情况下,内存布局对于虚拟或非虚拟继承仍然可能有所不同,但可能不是这种情况。 – Steve314 2013-02-21 06:32:48
是啊史蒂夫我知道虚拟继承这里没有做任何事情..但我只是检查什么是派生类的大小,如果我这样做...所以请我的方式.. – nagaradderKantesh 2013-02-21 06:42:09
@nagaradderKantesh - 我认为詹姆斯已经明白了。唯一的问题是,布局只是偶然*与非虚拟继承相同 - “shared”部分('BaseClass :: a'和'BaseClass :: b')大概是通过'offsetof'持有的在虚拟表中而不是在编译时知道偏移量。 – Steve314 2013-02-21 06:46:34