Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.09.2015, 15:54
mw_Kronos mw_Kronos вне форума
Прохожий
 
Регистрация: 12.01.2014
Сообщения: 12
Версия Delphi: RadStudio XE5
Репутация: 10
По умолчанию Классы в динамических массивах

Есть классы:

Код:
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  
Старый 03.09.2015, 16:25
mw_Kronos mw_Kronos вне форума
Прохожий
 
Регистрация: 12.01.2014
Сообщения: 12
Версия Delphi: RadStudio XE5
Репутация: 10
По умолчанию

Вопрос отпал. В ячейки массива попадают только поля родительского класса.
Ответить с цитированием
  #3  
Старый 03.09.2015, 16:26
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

нет, это не так. в массиве хранятся указатели на объекты.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #4  
Старый 03.09.2015, 22:06
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,052
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от mw_Kronos
Вопрос отпал. В ячейки массива попадают только поля родительского класса.

А вот фиг тебе.
Просто по умолчанию доступны только эти поля. А вот если привести к нужному типу, то сразу становятся доступны другие поля. Как уже упоминалось, в ячейках массива хранятся указатели, а они всегда 32/64 бита, так что ничего нигде не затирается и все доступно. Читаем про полиморфизм.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:50.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter