На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Закрыто archimed7592 11-03-2008: Лимит страниц. Продолжаем Delphi vs C++

Страницы: (117) « Первая ... 94 95 [96] 97 98 ...  116 117  ( Перейти к последнему сообщению )  
> Delphi vs C++ , Часть 1
    AndNot, а че там, давай создавай тему " Delphi vs Asm"! Забавно будет смотреться! Типа как "Микроскоп vs Молоток" :)
      --Ins--, я не собираюсь ничего сравнивать, просто хотел разрядить обстановку, а то спор куда то не в ту сторону пошел :D Для меня то очевидно, способ объявлений прототипов неважен, это все равно что сравнивать procedure vs void :lol:
      Цитата --Ins-- @
      а че там, давай создавай тему " Delphi vs Asm"
      Да уж, смотреться будет глупо :yes: Но я бы непроч сравнить ООП этих языков, т.е. скорость, компактность, а главное их возможности в этих направлениях :) Я, к примеру, сейчас начал использовать списки, на ООП, вот и интересно, насколько эффективно я это реализовал.
        Цитата
        Для меня то очевидно, способ объявлений прототипов неважен, это все равно что сравнивать procedure vs void

        Согласен :yes:

        Цитата
        Но я бы непроч сравнить ООП этих языков, т.е. скорость, компактность, а главное их возможности в этих направлениях Я, к примеру, сейчас начал использовать списки, на ООП, вот и интересно, насколько эффективно я это реализовал.


        А мы вроде бы пытались что-то такое обсуждать поверхностно... Но попробовать можно ;) Мне бы тоже было интересно, свежий взгляд со стороны не помешает, к тому же как раз собираюсь писать небольшую статейку по объектной модели в Delphi.
          Цитата --Ins-- @
          А мы вроде бы пытались что-то такое обсуждать поверхностно
          Было дело, ты мне здорово помог :yes:
          Цитата --Ins-- @
          Мне бы тоже было интересно, свежий взгляд со стороны не помешает
          Иногда даже излишне свежий :) Я был неприятно удивлен, когда не смог перевести мои асмовские сорсы в паскаль, поскольку там, оказывается, у всех потомков виртуального метода должно быть одинаковое объявление параметров :blink:
          Цитата --Ins-- @
          Но попробовать можно
          Думаю после 8-го марта появится немного времени, тогда и "созвонимся" :) Главное найти задачку, несложную, но по полной использующую ООП, желательно списки, стеки или очереди.
            Цитата
            Я был неприятно удивлен, когда не смог перевести мои асмовские сорсы в паскаль, поскольку там, оказывается, у всех потомков виртуального метода должно быть одинаковое объявление параметров


            Эээ, а что, бывает как-то иначе? :blink: Полиморфизм же в этом и заключается, что прототипы у нас одинаковые, что позволяет писать некий "обобщенный" код, а реализация (и следовательно поведение) - разная.
              Цитата AndNot @
              Я был неприятно удивлен, когда не смог перевести мои асмовские сорсы в паскаль, поскольку там, оказывается, у всех потомков виртуального метода должно быть одинаковое объявление параметров

              А это как раз и необязательно. Давно уже можно делать overload виртуальных методов:
              ExpandedWrap disabled
                If you overload a virtual method, use the reintroduce directive when you redeclare it in descendant classes. For example,
                 
                type
                 
                  T1 = class(TObject)
                    procedure Test(I: Integer); overload; virtual;
                  end;
                  T2 = class(T1)
                    procedure Test(S: string); reintroduce; overload;
                  end;

              Не это ли тебе было надо?
                Цитата Romkin @
                Давно уже можно делать overload виртуальных методов

                Какой ужас :o
                  Цитата --Ins-- @
                  Эээ, а что, бывает как-то иначе? :blink: Полиморфизм же в этом и заключается, что прототипы у нас одинаковые, что позволяет писать некий "обобщенный" код, а реализация (и следовательно поведение) - разная.

                  Ну у меня стек, очередь и т.д. реализованы на основе списков, и параметры у них разные. Может это и неправильно, но очень удобно :)
                    Цитата
                    Может это и неправильно, но очень удобно


                    По-моему, это и неправильно, и неудобно... <_< Вот смотри, я так понимаю, у очереди и у списка есть общий абстрактный наследник, и он сделан не случайно, а для того, чтобы клиентский код мог не знать о внутреннем устройстве списка (очередь это, или стек), а работать с ним как с неким абстрактным контейнером одинаковым образом. Это несложно реализовать. Нужно у базового класса-списка объявить виртуальные (или даже абстрактные) методы Push, Pop, IsEmpty, может еще какие-то, но прототип у всех у них будет одинаковым. И это позволит клиенту ОДИН раз написать ОБЩИЙ код, но в зависимости от того, что мы этому коду подсунем (очередь или стек), он будет работать так или иначе. Если же клиент должен знать о специфике потомков базового класса, то весь полиморфизм при этом теряется. И тогда даже в общем предке у классов и виртуальных методах смысла мало. :yes-sad:
                      Цитата wind @
                      Давно уже можно делать overload виртуальных методов

                      Какой ужас

                      Почему? Что такого страшного в виртуальных методах?
                        Romkin, а я другого не понял... Зачем указывать reintroduce? В справке написано, что так надо, но если не указать, то что изменится?
                          Цитата --Ins-- @
                          Зачем указывать reintroduce?

                          А ты посмотри справку по этой директиве :D
                          "The reintroduce directive suppresses compiler warnings about hiding previously declared virtual methods. "
                            Romkin, в том то и дело, что у меня варнинг не появляется, если reintroduce не указать.

                            Добавлено
                            Ведь предыдущее объявление Test не скрывается!
                              Цитата Romkin @
                              Что такого страшного в виртуальных методах?

                              Я не про виртуальные методы, а про нарушение контрактов.
                                Цитата wind @
                                Я не про виртуальные методы, а про нарушение контрактов.

                                Поясни, что ты хотел сказать :)

                                Цитата --Ins-- @
                                Romkin, в том то и дело, что у меня варнинг не появляется, если reintroduce не указать.

                                Убери директиву overload у предка. Потому что обычно ее там нет.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (117) « Первая ... 94 95 [96] 97 98 ...  116 117
                                Закрыто archimed7592 11-03-2008: Лимит страниц. Продолжаем Delphi vs C++



                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1064 ]   [ 15 queries used ]   [ Generated: 26.07.25, 22:23 GMT ]