Помощь - Поиск - Пользователи - Календарь
Полная версия: Внутреннее представление объектов
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Searcher
Здраствуйте, хотелось бы узнать внутреннее представление экземпляров f1,f2 объекта four.
Вот описание:
one=object
X:T;
M1;virtual;
end;

two=object(one)
M2;
end;

three=object(two)
Y:T;
end;

four=object(three)
M3;
M4;virtual;
end;

var
f1,f2:four;


Заранее спасибо!

Про теги не забывай
volvo
Что именно вызывает у тебя сложность? Наличие VMT?
Searcher
Цитата(volvo @ 4.02.2009 16:50) *

Что именно вызывает у тебя сложность? Наличие VMT?

Я так понимаю VMT для этих 2-ух экземпляров одна. В ней будет только адрес M4? X,Y и адрес метода M2 будут в обоих экземплярах?
volvo
Цитата
Я так понимаю VMT для этих 2-ух экземпляров одна.
VMT вообще всегда одна (для каждого объектного типа), она относится к типу, а не к экземпляру...

Будет вот так:
Поле X
Адрес VMT
Поле Y

Собственно VMT:
Первое слово = Sizeof(T) + Sizeof(T) + 2
Второе слово = -(Sizeof(T) + Sizeof(T) + 2)
@M1
@M4
Searcher
Так ведь методы M2 и M3 не виртуальные. Разве они в VMT?
volvo
Сорри, да, я ошибся, поправил...
Searcher
А вот так правильно?
Код
f1:                  f2:
Поле Х            Поле Х  
Поле Y            Поле Y
@Four.M3        @Four.M3
@VMT             @VMT

              VMT:
               ...
              @one.M1
              @four.M4

А @two.M2 не будет в обоих экземплярах?
volvo
Цитата
А @two.M2 не будет в обоих экземплярах?
Будет, перед @four.M3 (в порядке определения - ну, или добавления - методов)... Я просто не стал приводить статические методы, привел только поля, и методы виртуальные...
Searcher
Цитата(volvo @ 4.02.2009 17:33) *

Будет, перед @four.M3 (в порядке определения - ну, или добавления - методов)... Я просто не стал приводить статические методы, привел только поля, и методы виртуальные...

Спасибо. Теперь понял. Позже задам вопрос насчёт внутреннего представления экземпляров классов в делфи с динамическими и виртуальными методами с переопределением в потомках.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.