Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.037 c
14-1082233960
Yegorchic
2004-04-18 00:32
2004.04.11
http://delphigfx.mastak.ru/


3-1081425872
Rule
2004-04-08 16:04
2004.04.11
Есть в IBDataSete свойстов фильтеред, я им не пользовался со врем


1-1082562482
Ivolg
2004-04-21 19:48
2004.04.11
Изобоажение


1-1080013985
dm37
2004-03-23 06:53
2004.04.11
формирование числа со знаком


3-1081741809
Геннадий
2004-04-12 07:50
2004.04.11
Как выделить составляющую из даты?




   Наверх