Обсуждение:Виртуальный метод

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

вообще, стоит ли такие темы отрывать от языков? или переписать так, чтобы пдходило ко всем мыслимым /немыслимым языкам, или вернуть в с++. 217.25.194.150 8 июля 2005 12:28 (UTC)

Всегда бесило когда простейшую вещь растягивали на целые тома.Прочитав это творение я с некоторым трудом понял что тут написано, несмотря на то что , и так это знал. Что будет с человеком пришедшим выяснить что к чему, боюсь представить. Сократить бы раз в несколько, или переработать по нормальной схеме. Типа первый абзац в 10 строк - коротко и по существу, а делее уже уточнения и прибамбасы.

Не забывай, что для тебя эта вещь «простейшая» именно потому, что ты «и так это знал». По моему глубокому убеждению, для 99% людей программирование не является простым (или не являлось бы, если бы они им занялись). По сравнению с разманными на 1000 страниц «талмудами» для «чайников», эта статья — образец лаконичности.
Если хочешь что-то улучшить — валяй.
doublep 10:07, 11 июля 2005 (UTC)[ответить]

Как насчёт упростить[править код]

И текст. И код. Например, вместо:

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)[ответить]

217.25.194.150

Вот текст точно неплохо бы упростить, только желательно без потери содержания. Если есть идеи, их можно смело реализовывать. Редактировать может каждый. — 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 нет виртуальных функций и, соответственно, в объектах не хранится указатель на таблицу.
doublep 13:25, 10 августа 2005 (UTC)[ответить]
Кстати, в примере из статьи, 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)[ответить]

Виртуальные функции[править код]

В некоторых языках программирования, например в 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[ответить]