IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> Внутреннее представление объектов, Объектный Паскаль
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 24
Пол: Мужской

Репутация: -  0  +


Здраствуйте, хотелось бы узнать внутреннее представление экземпляров 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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 8)
сообщение
Сообщение #2


Гость






Что именно вызывает у тебя сложность? Наличие VMT?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 24
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 4.02.2009 16:50) *

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

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

Сообщение отредактировано: Searcher -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
Я так понимаю VMT для этих 2-ух экземпляров одна.
VMT вообще всегда одна (для каждого объектного типа), она относится к типу, а не к экземпляру...

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

Собственно VMT:
Первое слово = Sizeof(T) + Sizeof(T) + 2
Второе слово = -(Sizeof(T) + Sizeof(T) + 2)
@M1
@M4

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 24
Пол: Мужской

Репутация: -  0  +


Так ведь методы M2 и M3 не виртуальные. Разве они в VMT?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Сорри, да, я ошибся, поправил...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 24
Пол: Мужской

Репутация: -  0  +


А вот так правильно?
Код
f1:                  f2:
Поле Х            Поле Х  
Поле Y            Поле Y
@Four.M3        @Four.M3
@VMT             @VMT

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

А @two.M2 не будет в обоих экземплярах?

Сообщение отредактировано: Searcher -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата
А @two.M2 не будет в обоих экземплярах?
Будет, перед @four.M3 (в порядке определения - ну, или добавления - методов)... Я просто не стал приводить статические методы, привел только поля, и методы виртуальные...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 24
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 4.02.2009 17:33) *

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

Спасибо. Теперь понял. Позже задам вопрос насчёт внутреннего представления экземпляров классов в делфи с динамическими и виртуальными методами с переопределением в потомках.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.05.2024 2:52
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name