【发布时间】:2014-11-19 02:16:46
【问题描述】:
#include <stdio.h>
class Base1
{
public:
virtual int virt1() { return 100; }
int data1;
};
class Derived : public Base1
{
public:
virtual int virt1() { return 150; }
int derivedData;
};
int Global1( Base1 * b1 )
{
return b1->virt1();
}
main1()
{
Derived * d = new Derived;
printf( "%d %d\n", d->virt1(), Global1( d ));
printf("size: Base1:%d\n", sizeof(Base1));
printf("size: Derived:%d\n", sizeof(Derived));
}
我用上面的代码打印出基类和派生类的大小。我在 64 位机器上运行代码。我电脑的输出是
150 150
size: Base1:16
size: Derived:16
我还尝试使用 sizeof(int) 打印出 int 的大小,它是 4。
我有以下问题:
- 对于 Base1 类的大小,它应该包含一个 vptr 指向 vtable 和一个整数数据1。为什么它的大小是 16 而 sizeof(int) 在我的机器上是 4。
- 对于派生类,它应该具有从 Base1 类继承的数据和一个额外的整数。它应该有更大的尺寸 比 Base1 类,为什么它们是一样的?
- 除了这些大小之外,Derived 类中的 vptr 是什么? Derived 类中的 vptr 是否会覆盖从 Base1 继承的 vptr 上课?
【问题讨论】:
-
可以在here 找到非常相似的问题以及指向Memory Layout for Multiple and Virtual Inheritance 的链接,这是一篇非常有用的关于该主题的文章。
标签: c++ inheritance