Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.034 c
7-1080036182
Victor!
2004-03-23 13:03
2004.05.09
Обмен данными по модему


9-1068147963
kootel
2003-11-06 22:46
2004.05.09
Установка GLScene


7-1080148513
beard
2004-03-24 20:15
2004.05.09
Мультизагрузка в Windows XP


3-1081488012
sohat
2004-04-09 09:20
2004.05.09
DBRichEdit - можно ли в поле сохранять только текст


3-1081942884
AndrewK
2004-04-14 15:41
2004.05.09
Как отрезать время в параметре DateTime?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский