gpt4 book ai didi

c++ - 使用继承时类的大小是多少?

转载 作者:太空宇宙 更新时间:2023-11-03 10:39:43 25 4
gpt4 key购买 nike

嘿,我想了解当我使用继承时类的大小是如何工作的,所以我写了这段代码:

class AA 
{
public :
int a;
virtual int getSize() {return sizeof(*this);}
};

class BB : public AA
{
public :
int b;
virtual int getSize2() {return sizeof(*this);}
};

int _tmain(int argc, _TCHAR* argv[])
{
AA aa;
BB bb;
std::cout << "Class AA : " << aa.getSize() << std::endl;
std::cout << "Class BB : " << bb.getSize() << std::endl;
std::cout << "Class BB : " << bb.getSize2() << std::endl;
}

这段代码的输出是:

Class AA : 8
Class BB : 8
Class BB : 12

我的问题是:为什么第二个输出返回 AA 的大小而不是返回 BB 的大小? bb 是 BB 类型,所以我期待 12 而不是 8?

最佳答案

virtual int getSize() {return sizeof(*this);}

尽管我们并不总是这样认为,sizeof 是在编译时而不是运行时计算它的值的。所以你不妨把这个函数看成这样:

virtual int getSize() {return 8;}

当继承到另一个类时,您显然不希望更改它。

确保派生类返回正确值的方法是确保它们用各自类的大小覆盖此函数。

关于c++ - 使用继承时类的大小是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45244371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com