|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Классы в динамических массивах
Есть классы:
Код:
type TClassA = class a:integer; end; type TClassB = class(TClassA) b:integer; end; Есть динамический массив и переменные: Код:
var DynArray:array of TClassA; b,c,d:TClassB; Есть код: Код:
SetLength(DynArray, 3); DynArray[0] := b; DynArray[1] := c; DynArray[2] := d; Теперь вопрос: массив у меня типа TClassA, я записываю в него переменные типа TClassB. Компилятор такое допускает, поскольку класс B наследник класса A, но есть сомнения, что память для массива выделяется исходя из размера класса А и я рискую затереть часть данных из-за перекрытия ячеек памяти, ввиду того что переменные типа TClassB занимают на 4 байта больше памяти чем переменные типа TClassA. Так ли это? |
#2
|
|||
|
|||
Вопрос отпал. В ячейки массива попадают только поля родительского класса.
|
#3
|
||||
|
||||
нет, это не так. в массиве хранятся указатели на объекты.
Пишу программы за еду. __________________ |
#4
|
|||
|
|||
Цитата:
А вот фиг тебе. Просто по умолчанию доступны только эти поля. А вот если привести к нужному типу, то сразу становятся доступны другие поля. Как уже упоминалось, в ячейках массива хранятся указатели, а они всегда 32/64 бита, так что ничего нигде не затирается и все доступно. Читаем про полиморфизм. |