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

Fre*_*die 9 c++ compiler-construction inheritance memory-management

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

想象一下以下课程,对于成人和儿童来说,他们可以扩展一个Person课程,但是孩子有一本短书.

class Person
{

};

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

class Child : public Person
{
   char book[1000]; //Stores the book
};
Run Code Online (Sandbox Code Playgroud)

现在,如果您创建Person对象数组,并向其添加对象:

Adult adult1;
Child child1;

Person people[2];
people[0] = child1;
people[1] = adult1;
Run Code Online (Sandbox Code Playgroud)

我的问题是:编译器如何知道确保数组是连续内存块所需的空间,如果它不知道数组是否将填充Adult或Child(大小不同)对象?

我希望这有足够的意义来回答......

谢谢

Jam*_*lis 13

编译器如何知道确保数组是连续内存块所需的空间,如果它不知道数组是否将被填充AdultChild

people阵列不能包含AdultChild对象:它只能包含Person对象.

执行赋值时people[0] = child1;,实际发生的是对象的Person各个部分.所有部件都被有效忽略.child1people[0]Child

此行为(仅复制对象的基类部分)称为"切片".

要在C++中获得多态行为,必须使用指针作为引用.由于不可能有一个引用数组,你需要使用一个指针数组.