C ++ Размер классов и подклассов - PullRequest
1 голос
/ 01 сентября 2011

Если экземпляр класса использует 20 байтов, а его подкласс использует 24 байта, поскольку он является большим количеством членов, как можно сохранить экземпляр подкласса в переменной родительского класса?

Как:

Subclass s;
ParentClass p ;
p = s;

Ответы [ 3 ]

8 голосов
/ 01 сентября 2011

Вы не "храните" экземпляры "в" указателях.Указатели просто указывают на начало экземпляра в памяти.

Сам объект указателя содержит адрес памяти, и занимаемое им пространство всегда одинаково независимо от того, что - или какмного - данные можно найти по этому адресу.


Изменить (поскольку вопрос изменился почти полностью)

В примереВы добавили в свой вопрос, код не делает то, что вы думаете, что он делает.Вы не храните Subclass в ParentClass;вместо этого вы вырезаете производные биты s и копируете только его базовые биты в p.

В другом месте вы спрашивали, как вы можете поместить Derived в массив Base; вы не можете .

6 голосов
/ 01 сентября 2011

Размер указателя всегда одинаков.Он просто указывает на большую область памяти.

Сравните:

+-----+
| ptr | ------+
+-----+       |
              v
              +----------+
              | Base     |
              +----------+

с:

+-----+
| ptr | ------+
+-----+       |
              v
              +----------+----+
              | Derived       |
              +----------+----+

Где значение указателя в обоих случаях является неким вымышленным адресом, который отмечаетначальный адрес области памяти, в которой находится соответствующий объект.

2 голосов
/ 01 сентября 2011

Экземпляры класса (т.е. объекты) не хранятся в указателях. Они просто занимают память, экземпляры подкласса в целом больше, чем экземпляры классов. Указатели, как следует из названия, указывают только на эти объекты в памяти. Указатель можно сравнить с адресом блока памяти. И адрес всегда занимает одинаковое количество байтов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...