Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Внизvirtual vs не-virtual Найти похожие ветки
← →
wicked © (2004-04-19 15:45) [0]можно ли где-то узнать про критерии того, когда делать методы класса виртуальными, а когда - нет?... интересны были бы ссылки на классиков, буде такие найдутся...
TIA
← →
wicked © (2004-04-19 15:45) [0]можно ли где-то узнать про критерии того, когда делать методы класса виртуальными, а когда - нет?... интересны были бы ссылки на классиков, буде такие найдутся...
TIA
← →
Reindeer Moss Eater © (2004-04-19 15:47) [1]Не делая их виртуальными их можно делать статическими или динамическими. Ты что имеешь ввиду?
← →
Reindeer Moss Eater © (2004-04-19 15:47) [1]Не делая их виртуальными их можно делать статическими или динамическими. Ты что имеешь ввиду?
← →
Тимохов © (2004-04-19 15:48) [2]Интересно было бы узнать критерии когда идти налево, а когда направо?
Думаю ответ на мой вопрос - идти туда, куда вам нужно.
Аналогия понятна?
← →
Тимохов © (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 и т.д.
← →
[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) [4]Удалено модератором
Примечание: дубль
← →
oleg_art (2004-04-19 15:51) [5]Р.Лишнер "Секреты Delphi" . Глава "Таблица виртуальных методов".
← →
oleg_art (2004-04-19 15:51) [5]Р.Лишнер "Секреты Delphi" . Глава "Таблица виртуальных методов".
← →
wicked © (2004-04-19 15:58) [6]что имелось в виду - если создаётся иерархия классов, есть ли методы определения того, какие методы делать виртуальными, а какие нет?...
простой пример - если мы пишем наследника от TMemoryStream, может возникнуть ситуация, что нам нужно перекрыть процедуры LoadFromStream и SaveToStream... но, поскольку они не виртуальны, нужного эффекта это нам не даст, так как используя ссылку на TMemoryStream, наши новые процедуры не будут вызваны...
вот и хотелось бы избежать подобных граблей в своих классах...
за ссылки спасибо.... :)
← →
wicked © (2004-04-19 15:58) [6]что имелось в виду - если создаётся иерархия классов, есть ли методы определения того, какие методы делать виртуальными, а какие нет?...
простой пример - если мы пишем наследника от TMemoryStream, может возникнуть ситуация, что нам нужно перекрыть процедуры LoadFromStream и SaveToStream... но, поскольку они не виртуальны, нужного эффекта это нам не даст, так как используя ссылку на TMemoryStream, наши новые процедуры не будут вызваны...
вот и хотелось бы избежать подобных граблей в своих классах...
за ссылки спасибо.... :)
← →
Тимохов © (2004-04-19 16:06) [7]
> вот и хотелось бы избежать подобных граблей в своих классах...
Вы уверены, что это грабли?
Разработчик класса TMemotyStream не считает, что вам нужно дать возможность перекрывать данный метод. Если хотите это сделать - напишите свой метод LoadFromStream2. В чем проблема?
← →
Тимохов © (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: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.
← →
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]Переопределить сможет, только это будет уже не виртуальный метод.
← →
Anatoly Podgoretsky © (2004-04-19 16:11) [10]Переопределить сможет, только это будет уже не виртуальный метод.
← →
wicked © (2004-04-19 16:14) [11]
> Разработчик класса TMemotyStream не считает, что вам нужно
> дать возможность перекрывать данный метод. Если хотите это
> сделать - напишите свой метод LoadFromStream2. В чем проблема?
так и сделал... вопрос то в другом:
> ... если создаётся иерархия классов, есть
> ли методы определения того, какие методы делать виртуальными,
> а какие нет?...
сорри за самоцитирование....
← →
wicked © (2004-04-19 16:14) [11]
> Разработчик класса TMemotyStream не считает, что вам нужно
> дать возможность перекрывать данный метод. Если хотите это
> сделать - напишите свой метод LoadFromStream2. В чем проблема?
так и сделал... вопрос то в другом:
> ... если создаётся иерархия классов, есть
> ли методы определения того, какие методы делать виртуальными,
> а какие нет?...
сорри за самоцитирование....
← →
Тимохов © (2004-04-19 16:21) [12]
> wicked © (19.04.04 16:14) [11]
Извините и вы меня за самоцитирование - идите туда, куда вам нужно, иными словами - делайте виртуальными методами те методы, которые нужно сделать виртуальными, а не виртуальными - которые не нужно делать виртуальными.
Какие здесь методики?
Это определяется задачей...
← →
Тимохов © (2004-04-19 16:21) [12]
> wicked © (19.04.04 16:14) [11]
Извините и вы меня за самоцитирование - идите туда, куда вам нужно, иными словами - делайте виртуальными методами те методы, которые нужно сделать виртуальными, а не виртуальными - которые не нужно делать виртуальными.
Какие здесь методики?
Это определяется задачей...
← →
wicked © (2004-04-19 16:24) [13]спасибо.... :)
в общем то так и делается...
← →
wicked © (2004-04-19 16:24) [13]спасибо.... :)
в общем то так и делается...
← →
Тимохов © (2004-04-19 16:26) [14]
> в общем то так и делается...
правильно значит делается :)
← →
Тимохов © (2004-04-19 16:26) [14]
> в общем то так и делается...
правильно значит делается :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.035 c