为什么这个子类增加了成员变量,大小却和基类一样?

问题描述 投票:0回答:2

在下面的代码中,为什么Parent的大小与Child的大小相同(尽管Child添加了成员变量)?另一个奇怪的行为:如果我注释掉定义 b 的行,则 Child 的大小保持不变,但如果我添加另一个变量 (int b, c;),则 sizeof 给出 24。 非常感谢解释为什么会发生这种情况(:

#include <iostream>

class Parent {
    int a = 0;
public:
    virtual void foo() {}
};

class Child : public Parent {
    int b; // this line doesn't affect the output
};

int main() {
    std::cout << sizeof(Parent) << ", " << sizeof(Child);
    return 0;
}
// Output is : 16, 16

注意:这是我第一次在这里提问,所以如果不清楚或表述不当,请随时要求我编辑。

c++ subclass sizeof virtual-functions
2个回答
0
投票

这是由于虚函数的存在

foo
:

virtual void foo() {}

编译器生成一个指向虚拟函数地址表的指针,在您的系统中,该指针等于

8
,而
sizeof( int )
等于
4
。因此,由于父类的分配,其大小等于
16


0
投票

包含父类 { int a = 0;公共:虚拟无效foo(){}};子类:公共父类 { int b; // 此行不影响输出 }; int main() { std::cout << sizeof(Parent) << ", " << sizeof(Child); return 0; }

© www.soinside.com 2019 - 2024. All rights reserved.