C ++ выделяет пространство для объектов с помощью наследования

У меня вопрос о том, как компилятор C ++ знает, сколько места ему нужно выделить для объекта при использовании наследования.

Представьте себе следующие классы для взрослого и дочернего, которые расширяют класс Person, но где у ребенка есть небольшая книга с ними.

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 (которые сильно различаются по размеру)?

Я надеюсь это имеет достаточно смысла, чтобы ответить ...

Спасибо

9
задан Freddie 30 July 2011 в 17:14
поделиться