Обсуждение:Виртуальный метод (KQvr';yuny&Fnjmrgl,udw bymk;)
Эта статья тематически связана с вики-проектом «Информационные технологии», цель которого — создание и улучшение статей по темам, связанным с информационными технологиями. Вы можете её отредактировать, а также присоединиться к проекту, принять участие в его обсуждении и поработать над требуемыми статьями. |
Untitled
[править код]вообще, стоит ли такие темы отрывать от языков? или переписать так, чтобы пдходило ко всем мыслимым /немыслимым языкам, или вернуть в с++. 217.25.194.150 8 июля 2005 12:28 (UTC)
Всегда бесило когда простейшую вещь растягивали на целые тома.Прочитав это творение я с некоторым трудом понял что тут написано, несмотря на то что , и так это знал. Что будет с человеком пришедшим выяснить что к чему, боюсь представить. Сократить бы раз в несколько, или переработать по нормальной схеме. Типа первый абзац в 10 строк - коротко и по существу, а делее уже уточнения и прибамбасы.
- Не забывай, что для тебя эта вещь «простейшая» именно потому, что ты «и так это знал». По моему глубокому убеждению, для 99% людей программирование не является простым (или не являлось бы, если бы они им занялись). По сравнению с разманными на 1000 страниц «талмудами» для «чайников», эта статья — образец лаконичности.
- Если хочешь что-то улучшить — валяй.
Как насчёт упростить
[править код]И текст. И код. Например, вместо:
class Ancestor
{ public: virtual void function1 () { cout << "Ancestor::function1()" << endl; } void function2 () { cout << "Ancestor::function2()" << endl; } };
написать
class A
{ public: virtual void f1 () { cout << "A::f1()" << endl; } void f2 () { cout << "A::f2()" << endl; } };
... Хотя бы? 217.25.194.150 11:14, 9 августа 2005 (UTC)
- Это называется не упрощением а «obfuscation». Если еще
functionN()
<=>fN()
понятно, то зачем убирать осмысленное слово (пусть и английское) и ставить вместо него просто букву? «Длинные мнемоничные идентификаторы». — doublep 13:40, 10 августа 2005 (UTC)- Чтобы в глазах не рябило. Если Вы - программист, скажите - Вы, что, ВОТ ТАК вот свои программы пишете? С «длинными мнемоничными идентификаторами»? 217.25.194.150 10:45, 3 ноября 2005 (UTC)
- Именно так. Если интересно то исходники (чистый C, правда) есть на [1], сорри за невольную рекламу. Я согласен что в программе как выше мнемоничность особого значения не имеет, но в большом проекте, по-моему, без нее никуда. — doublep 12:14, 3 ноября 2005 (UTC)
- Блин, ну придумали же контекстные подсказки зачем-то...
- Это к чему, я не понял. — doublep 18:47, 10 ноября 2005 (UTC)
- Блин, ну придумали же контекстные подсказки зачем-то...
- Именно так. Если интересно то исходники (чистый C, правда) есть на [1], сорри за невольную рекламу. Я согласен что в программе как выше мнемоничность особого значения не имеет, но в большом проекте, по-моему, без нее никуда. — doublep 12:14, 3 ноября 2005 (UTC)
- Чтобы в глазах не рябило. Если Вы - программист, скажите - Вы, что, ВОТ ТАК вот свои программы пишете? С «длинными мнемоничными идентификаторами»? 217.25.194.150 10:45, 3 ноября 2005 (UTC)
- Вот текст точно неплохо бы упростить, только желательно без потери содержания. Если есть идеи, их можно смело реализовывать. Редактировать может каждый. — doublep 13:43, 10 августа 2005 (UTC)
Вопрос
[править код]В статье написано: «В некоторых языках программирования, например в Java, все функции-члены класса, кроме статических, являются виртуальными». А какие ещё бывают, кроме статических и виртуальных? SergV 15:13, 9 августа 2005 (UTC)
- Бывают, э…, нестатические невиртуальные, вот! :) Пример (C++):
class Foo { public: // конструктор Foo ();
// статическая функция static void static_function ();
// виртуальная функция virtual void virtual_function ();
// нестатическая невиртуальная функция void plain_function (); };
- В Java такие функции могут быть эмулированы, если поставить у функции аттрибут final прямо в том классе, где она объявлена. Хотя это не совсем то.
- Приводить примеры лень, но такие функции полезны и имеют право на существование. Как минимум, существование невиртуальных (и нестатических) функций позволяет добиться того, что sizeof (std::string) == sizeof (void *), так как у std::string нет виртуальных функций и, соответственно, в объектах не хранится указатель на таблицу.
- Кстати, в примере из статьи, function2() нестатическая и невиртуальная. — doublep 13:29, 10 августа 2005 (UTC)
- Ага, похоже, я с прямым углом перепутал :) Спасибо. SergV 16:19, 10 августа 2005 (UTC)
- „Класс, содержащий хотя бы один такой метод, также называют абстрактным.“ - не совсем точное утверждение. Не уверен насчет других языков и платформ, но в C# класс, не содержащий абстрактных членов, тоже может быть абстрактным. Хорошо известный пример - System.ValueType. Nikov 12:36, 9 июля 2007 (UTC)
- Да, действительно. В Java тоже. Я немного подкорректировал текст статьи, сейчас еще дополню статью абстрактный класс. — doublep 12:52, 9 июля 2007 (UTC)
Хорошая статья. Особенно порадовало, что кроме примеров на C++ есть еще и примеры на моем родном языке - паскале 217.195.78.149 14:33, 19 февраля 2008 (UTC)Legat
Перевод virtual
[править код]В данном случае виртуальный — калька с англ. virtual, что в данном случае означает фактический.
Это желательно добавить, но не знаю, куда воткнуть.
--79.164.42.202 20:33, 7 декабря 2009 (UTC)
- Добавил. Лучше поздно, чем никогда) Yanpas (обс) 08:04, 21 октября 2016 (UTC)
Виртуальные функции
[править код]В некоторых языках программирования, например в Java, нет понятия виртуального метода
Что? В Java все методы по-умолчанию являются виртуальными. В противном случае надо писать final перед методом, чтобы в последующем наследовании нельзя было переопределить этот метод.
Таким образом всё-таки виртуальные функции есть в языке, даже если по-умолчанию, выявляется их присутствие как раз дополнительным ключевым словом, которое отключает возможность переопределения.
--Igroman 11:44, 27 мая 2011 (UTC)
- В начале статьи дано определение, под которое методы в Java полностью попадают. DeLZeX 12:50, 30 августа 2011 (UTC)
Аналог виртуальных методов в php. Пример из статьи
[править код]В php аналогом виртуального метода может быть не только позднее статическое связывание. Если заменить строчку echo static::a(); на echo $this->a(); , то тоже выведется вода, огонь
83.69.212.66 09:19, 11 апреля 2014 (UTC) Dean300