gpt4 book ai didi

C++ 使用继承为对象分配空间

转载 作者:可可西里 更新时间:2023-11-01 17:17:34 25 4
gpt4 key购买 nike

我有一个问题,关于 C++ 编译器如何知道在使用继承时它需要为对象分配多少空间。

想象一下下面的类,一个成人和一个 child 扩展了一个 Person 类,但是 child 有一本小书。

class Person
{

};

class Adult : public Person
{
//No book
};

class Child : public Person
{
char book[1000]; //Stores the book
};

现在,如果您创建一个 Person 对象数组,并向它们添加对象:

Adult adult1;
Child child1;

Person people[2];
people[0] = child1;
people[1] = adult1;

我的问题是:如果编译器不知道数组是否将填充 Adult 或 Child(大小相差很大)对象,它如何知道需要多少空间来确保数组是一个连续的内存块?

我希望这足以回答...

谢谢

最佳答案

How does the compiler know how much space it needs to ensure the array is a contiguous memory block, if it doesn't know whether the array will be filled with Adult or Child

people 数组不能包含AdultChild 对象:它只能包含Person 对象。

当您执行赋值 people[0] = child1; 时,实际发生的是 child1 对象的 Person 部分被赋值到人[0]。所有 Child 部分都被有效地忽略了。

这种只复制对象的基类部分的行为称为“切片”。

要在 C++ 中获得多态行为,您必须使用指针或引用。由于不可能有引用数组,因此您需要使用指针数组。

关于C++ 使用继承为对象分配空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6884714/

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