Форум
Компьютерные священные войны
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, netch80, Вы писали: N>Здравствуйте, Evgeny.Panasyuk, Вы писали: _>>>>Ты же наверняка знаешь, что во всех этих языках все методы являются виртуальными функциями (говоря языком C++). N>>>Вы тут ну очень много написали, но в следующих ста сообщениях я не увидел возражений, поэтому комментирую. Как это получилось, что ты не в курсе, что в Java и C# просто перевёрнуто умолчание объявления метода виртуальным? Там, где в C++ говорится virtual, в Java молчат, а где в C++ не говорится virtual, в Java говорится final (а в C# - sealed), последствия для виртуальности те же. EP>>Вообще-то это другое, с другими свойствами. final/sealed не делает метод не виртуальным, точнее виртуальный метод вполне может быть final :xz: EP>>И кстати final есть и в C++, что я уже выше упоминал. N>Формально и в C++ ничто не мешает сделать все методы виртуальными, насколько я помню. Но не делают :) N>Я про то, что если метод не существовал у предков и сразу был объявлен final, то этого достаточно, чтобы его не виртуализовать, и главное, что это общеизвестно и активно используется. И если собеседник этого не знает, но говорит, что "все методы являются виртуальными функциями", то он просто не готов для дискуссии. N>А формальности оставьте для language lawyers. N>>>Это чуть упрощая (есть проблемы одноимённых методов и т.п.), но для данных целей сгодится. И видя final - компилятор (пусть JIT) точно так же имеет право рисовать обращение напрямую к нужному методу или инлайнить его. EP>>Вот только в [url=http://rsdn.org/forum/flame.comp/6666151.1]примере[/url] который разбирался в топике, final в базе A на метод f не поставишь :xz: N>Не поставишь. Но компилятор уже знает, что тип зависит от , и вполне может внутри себя сделать (псевдокод) N>[code] N>A a; N>if (x) { a = new B(); a.B::f(); } N>else { a = new C(); a.C::f(); } N>[/code] N>и, по тому, что я слышал, так часто и делает. N>И разбирался не только этот пример.
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …