Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > виртуальные функции


Автор: WERITAS 30.4.2006, 12:29
Есть иерархия, где описан витуальный метод. Что будет, если метод пользовательских классов сделать не виртуальным? И почему?  

Автор: Yanis 30.4.2006, 13:16
Перефразируй и в код. 

Автор: WERITAS 30.4.2006, 13:56
Код

type TProduct = class(TComponent)
private
  FName: string;
  FPrice: real;
  procedure  SetFName(const Value: string);
  procedure  SetFPrice(const Value: real);

public
  constructor Create(const nm:string; const pr:real);
  destructor  Destroy();
  procedure Show(j: integer); virtual; abstract;

published
  property AdName:  string read FName  write SetFName;
  property AdPrice: real  read  FPrice write SetFPrice;
end;

type TGoods = class(TProduct)
private
  FMassa: integer;
  procedure  SetFMassa(const Value: integer);

public
  constructor Create(const nm:string; const pr:real; const ma:integer);
  destructor  Destroy();
  procedure Show(j: integer); override;

published
  property AdMassa: integer read FMassa write SetFMassa;
end;


Если в классе TProduct убрать у ф-ции Show убрать "virtual; abstract" и в implementation определить ее, то что произойдет, при вызове функции Show у объекта класса TGoods?

P.S. Не могу до конца врубиться как работает полиморфизм. smile  

Автор: Quadr0 30.4.2006, 13:58
...

Автор: WERITAS 30.4.2006, 14:48
А в чем преимущества полиморфизма? Почему бы просто для  каждого класса не определить функцию?  

Автор: Quadr0 30.4.2006, 18:40
...

Автор: WERITAS 1.5.2006, 09:12
Quadr0, 
Спасибо, теперь мне все понятно smile

P.S. 
Цитата
Тяжёлый случай...

ИМХО лучше выглядеть дураком 5 минут, чем остаться им на всю жизнь.  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)