Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как вызвать процедуру наследника


pum5a ©   (2003-02-03 18:19:00) 

В общем есть такая штука

TBaseFrom = class(TForm)
...
public
procedure InitView;
...

TBaseForm1 = class(TBaseForm)
...
public
procedure InitView
...

procedure TBaseForm1.InitView;
begin
inherited;
....
end;


Мне нужно что-то вроде этого

procedure IV(f: TBaseForm);
begin
if f<>nil then
f.InitView;
end;


...

IV(BaseForm1);

Но вместо того, чтоб вызвать процедуру класса BaseForm1 вызывается процедура предка :(((
Подсткажите, плиз, где я ошибся. IV(f: TBaseForm1) не пойдет, т.к. вызов этой щтуки происходит для разных наследников.


pum5a   (2003-02-05 01:37:00) [1]

tnx


>uw: Про dynamic пока забудь.



Virtual versus dynamic
Virtual and dynamic methods are semantically equivalent. They differ only in the implementation of method-call dispatching at runtime. Virtual methods optimize for speed, while dynamic methods optimize for code size.
In general, virtual methods are the most efficient way to implement polymorphic behavior. Dynamic methods are useful when a base class declares many overridable methods which are inherited by many descendant classes in an application, but only occasionally overridden.

В моём случае скорее dynamic


uw   (2003-02-03 22:09:00) [2]

Про dynamic пока забудь.


a3m   (2003-02-03 19:06:00) [3]

вот тебе код:

A = class
...
procedure one; virtual;
...

B = class (A)
...
procedure one;override;
begin
inherited;
...
end;

вызываем так:
функция one виртуальная, в потомке (B) перекрывается (override).. Если объект some класса B (даже если он объявлен как some : A, но some := B.Create), то some.one - вызовет имеено one класса B.

по-моему это так. если, конечно, вопрос правильно понял...


pum5a   (2003-02-03 19:05:00) [4]

Всё :)). Сам разобрался. Если кому-то интересно - делаем так:

TBaseFrom = class(TForm)
...
public
procedure InitView; dynamic;
...

TBaseForm1 = class(TBaseForm)
...
public
procedure InitView; override;
...


;))) Да здравствует Object Pascal


Наверх

Титульная страница Поиск, карта сайта Написать письмо