Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.11.14;
Скачать: CL | DM;

Вниз

Наследование: вызов метода потомка через родителя   Найти похожие ветки 

 
Rembo   (2010-08-22 00:37) [0]

Всем привет!
У меня есть класс родитель и несколько потомков.
Можно ли не зная типа потомка вызвать его метод через родителя?
Пример:
TParrentClass(Pointer).proc;
Где Pointer содержит указатель на экземпляр потомка TParrentClass


 
sniknik ©   (2010-08-22 00:44) [1]

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


 
Юрий Зотов ©   (2010-08-22 00:46) [2]

Если метод Proc - виртуальный (или динамический), то без проблем.


 
Rembo   (2010-08-22 00:47) [3]

Суть такова: есть tlist с указателями на несколько потомков, у каждого по своему реализована proc. Хочу в цикле пройтись и у каждого ее вызвать
TParrentClass(objects[i]).proc;
вызывает ошибку


 
Rembo   (2010-08-22 00:49) [4]

2Юрий Зотов
TParrentClass=class
procedure proc; virtual;Abstract;
end;

TChild=class(TParrentClass)
procedure proc;override;
end;


 
Rembo   (2010-08-22 00:54) [5]

Ага я понял уже все, пасиба


 
Юрий Зотов ©   (2010-08-22 20:59) [6]


> Rembo   (22.08.10 00:54) [5]

Фишка в том, что первые 4 байта по адресу, на который указывает Ваш Pointer, содержат адрес VMT (таблицы виртуальных методов, которая уже содержит адреса самих методов). Когда Вы создавали объект, то в эти его первые 4 байта записался адрес VMT того класса, к которому созданный объект фактически принадлежит. Поэтому и будет вызван правильный нужный метод, а приведение указателя к TParentClass нужно лишь затем, чтобы не ругался компилятор.



Страницы: 1 вся ветка

Текущий архив: 2010.11.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
15-1280489099
Омлет
2010-07-30 15:24
2010.11.14
А у кого пращур из неандертальских?


15-1280865079
NailMan
2010-08-03 23:51
2010.11.14
А еще я подсел на действующий стимпанк...


2-1282062216
manYury
2010-08-17 20:23
2010.11.14
Свертывание TreeNode при переходе к другому TreeNode


15-1280694604
Юрий
2010-08-02 00:30
2010.11.14
С днем рождения ! 2 августа 2010 понедельник


11-1226388197
Максим
2008-11-11 10:23
2010.11.14
Ошибка в последнем дистрибутиве KOL MCK!