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

Вниз

virtual vs не-virtual   Найти похожие ветки 

 
wicked ©   (2004-04-19 15:45) [0]

можно ли где-то узнать про критерии того, когда делать методы класса виртуальными, а когда - нет?... интересны были бы ссылки на классиков, буде такие найдутся...
TIA


 
Reindeer Moss Eater ©   (2004-04-19 15:47) [1]

Не делая их виртуальными их можно делать статическими или динамическими. Ты что имеешь ввиду?


 
Тимохов ©   (2004-04-19 15:48) [2]

Интересно было бы узнать критерии когда идти налево, а когда направо?

Думаю ответ на мой вопрос - идти туда, куда вам нужно.
Аналогия понятна?


 
[lamer]Barmaglot ©   (2004-04-19 15:48) [3]

RTFM?

http://www.delphimaster.ru/articles/nonvs/index.html

+ yandex, rambler, altavista и т.д.


 
oleg_art   (2004-04-19 15:51) [4]

Удалено модератором
Примечание: дубль


 
oleg_art   (2004-04-19 15:51) [5]

Р.Лишнер "Секреты Delphi" . Глава "Таблица виртуальных методов".


 
wicked ©   (2004-04-19 15:58) [6]

что имелось в виду - если создаётся иерархия классов, есть ли методы определения того, какие методы делать виртуальными, а какие нет?...

простой пример - если мы пишем наследника от TMemoryStream, может возникнуть ситуация, что нам нужно перекрыть процедуры LoadFromStream и SaveToStream... но, поскольку они не виртуальны, нужного эффекта это нам не даст, так как используя ссылку на TMemoryStream, наши новые процедуры не будут вызваны...
вот и хотелось бы избежать подобных граблей в своих классах...

за ссылки спасибо.... :)


 
Тимохов ©   (2004-04-19 16:06) [7]


> вот и хотелось бы избежать подобных граблей в своих классах...

Вы уверены, что это грабли?
Разработчик класса TMemotyStream не считает, что вам нужно дать возможность перекрывать данный метод. Если хотите это сделать - напишите свой метод LoadFromStream2. В чем проблема?


 
WebErr ©   (2004-04-19 16:07) [8]

В общем:

TVector = class
protected
 X, Y: Integer;
public
 function Some: Integer; virtual;
end;

TShmector = class
public
 function Some: Integer; override;
end;

...

function TVector.Some: Integer;
begin
 Result := X;
end;

function TShmector.Some: Integer;
begin
 Result := Y;
end;

Если уберёте virtual в классе TVector, то не сможете переопределить (override) метод Some в классе Shmector. :))))


 
WebErr ©   (2004-04-19 16:09) [9]

Другое дело virtual vs 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.


 
Anatoly Podgoretsky ©   (2004-04-19 16:11) [10]

Переопределить сможет, только это будет уже не виртуальный метод.


 
wicked ©   (2004-04-19 16:14) [11]


> Разработчик класса TMemotyStream не считает, что вам нужно
> дать возможность перекрывать данный метод. Если хотите это
> сделать - напишите свой метод LoadFromStream2. В чем проблема?

так и сделал... вопрос то в другом:
> ... если создаётся иерархия классов, есть
> ли методы определения того, какие методы делать виртуальными,
> а какие нет?...

сорри за самоцитирование....


 
Тимохов ©   (2004-04-19 16:21) [12]


> wicked ©   (19.04.04 16:14) [11]

Извините и вы меня за самоцитирование - идите туда, куда вам нужно, иными словами - делайте виртуальными методами те методы, которые нужно сделать виртуальными, а не виртуальными - которые не нужно делать виртуальными.

Какие здесь методики?
Это определяется задачей...


 
wicked ©   (2004-04-19 16:24) [13]

спасибо.... :)
в общем то так и делается...


 
Тимохов ©   (2004-04-19 16:26) [14]


> в общем то так и делается...

правильно значит делается :)



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

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

Наверх




Память: 0.5 MB
Время: 0.062 c
7-1075476341
shodan
2004-01-30 18:25
2004.04.11
Порты


1-1082824349
Namo
2004-04-24 20:32
2004.04.11
как использовать UNICODE


4-1079083081
BillyJeans
2004-03-12 12:18
2004.04.11
Как в WndProc обработать сообщения от конролов с формы?


1-1079950484
Aleksandr
2004-03-22 13:14
2004.04.11
Смешно, но не могу наладить показ итемов ListBox a в его хинте


6-1076327014
Behemoth
2004-02-09 14:43
2004.04.11
Проблема с IdTCPServer....