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

Страницы: (117) « Первая ... 66 67 [68] 69 70 ...  116 117  ( Перейти к последнему сообщению )  
> Delphi vs C++ , Часть 1
    Цитата Smike @
    Ржать вы все мастера. А аргументировать? ;)

    Аргументируй мне для начала как такое должно работать без полиморфизма(за синтаксис не бить):
    ExpandedWrap disabled
      procedure f(i: IInterface);
      begin
        i.foo(5);
      end;
       
      var
        i1, i2: IInterface;
      begin
        i1 = Impl1.Create;
        i2 = Impl1.Create;
        f(i1);
        f(i2);
      end;
      Цитата Орион @
      не то, что имелось ввиду)))) хорошо, смотри: есть класс, который реализует поведение А и класс, который реализует поведение А1, а есть класс, который реализует поведение Б, а есть класс, который реализует поведение С.
      Тебе нужен класс Х, который реализует поведение А и А1(доступное всем) и поведение Б(доступное наследникам) и поведение С(доступное только классу Х). Как это будет выглядеть в не множественном наследовании?

      Наследуешься от Б, дописываешь C и имплементируешь A и A1.
      Smike уже привел пример, в 15:28

      Добавлено
      Цитата archimed7592 @
      Аргументируй мне для начала как такое должно работать без полиморфизма(за синтаксис не бить):

      Просто: при обращении к foo компилятор подшивает прямой адрес этого метода. Смещение в таблице известно на этапе компиляции, и одинаково для i1 и i2. То есть, затраты предполагаются такими же, что и для статического метода.
      Сообщение отредактировано: Romkin -
        Цитата Romkin @
        Просто: при обращении к foo компилятор подшивает прямой адрес этого метода. Смещение в таблице известно на этапе компиляции, и одинаково для i1 и i2. То есть, затраты предполагаются такими же, что и для статического метода.

        не может он прямой адрес подставить. смещение в виртуальной таблице это не адрес, но оно, да, известно.
        нет. статический метод имеет адрес, виртуальный - лишь место в таблице, конкретный адрес вычисляется во время выполнения.
          Цитата Romkin @
          Наследуешься от Б, дописываешь C и имплементируешь A и A1.
          Smike уже привел пример, в 15:28

          :blink: это ты считаешь лучше множественного наследования? :blink: и второе, покажи ссылку - не найду
            ссылка
            Цитата Орион @
            второе, покажи ссылку - не найду
              Romkin =)
              а теперь посмотри первое - вот эта попытка решить такую вроде бы невинную задачку не кажется тебе немного....эм черезчур сложной и неадекватной задаче?
              а теперь смотри второе - а что делать когда есть несколько Б-подобных и С-подобных классов? Ты представь сколько всего нужно писать ручками для каждой комбинации......это ж ого-го!
              ....и повторное использование кода получается на уровне копи-паст....
              Сообщение отредактировано: Орион -
                Цитата daevaorn @
                не может он прямой адрес подставить. смещение в виртуальной таблице это не адрес, но оно, да, известно.
                нет. статический метод имеет адрес, виртуальный - лишь место в таблице, конкретный адрес вычисляется во время выполнения.

                Хм. Да, запутался. Впрочем, никогда не интересовался. Вроде действительно должен быть эквивалент вызову виртуального метода...
                Посмотрел. Да, косвенно. Сорри, это виртуальный метод.

                Добавлено
                Цитата Орион @
                а что делать когда есть несколько Б-подобных и С-подобных классов? Ты представь сколько всего нужно писать ручками для каждой комбинации......это ж ого-го!

                Представить уже не могу :) Только не вечером. Завтра подумаю.
                  Цитата Alex Forth @
                  Я бы тебе ключевые моменты листинга сбросил, да Делфей нету и ставить их в лом.

                  Откуда же тебе известны такие тайны Delphi-компилятора?

                  Цитата archimed7592 @
                  Аргументируй мне для начала как такое должно работать без полиморфизма(за синтаксис не бить):

                  Ну вообще-то такое не будет компилироваться :D

                  Ориону: вполне нормальная реализация, все четко распределено. Зато я могу например вместо одной подсунуть любую другую. А как это с множественным наследованием? И неужели удобно потом разбирать десятки методов из разных классов? А главное, классы-имплементоры совершенно не зависят от класса-агрегатора.

                  Добавлено
                  Интерфейс ˜— это по идее не более чем свидетельство, что данный класс должен содержать определенный метод. То есть некая таблица смещений, но это уже если интерфейс получен от конкретного класса. В коде это не больше чем декларация.

                  А вот в C++ интерфейсы действительно реализованы через задний проход <_<
                    Цитата Smike @
                    А вот в C++ интерфейсы действительно реализованы через задний проход <_<

                    Откуда же тебе известны такие тайны С++-компилятора?
                      Цитата Flex Ferrum @
                      Откуда же тебе известны такие тайны С++-компилятора?

                      Это не секрет. В C++ интерфейсы реализованы через абстрактные классы :)
                        Цитата Smike @
                        Это не секрет. В C++ интерфейсы реализованы через абстрактные классы :)

                        а докажи, что это хуже?
                          Цитата Smike @
                          В C++ интерфейсы реализованы через абстрактные классы

                          И что? Чем плоха такая реализация?
                            Smike, ок, приведи мне компилируемый код, следующей структуру(если это вообще возможно):
                            1. есть интерфейс IMyInterface, обязующий имплементирующий класс содержать ф-цию foo принимающую аргумент целового типа и возвращающую булево значение.
                            2. есть два класса, реализующих этот интерфейс TMyImpl1 и TMyImpl2 разными способами.
                            3. сделай произвольную процедуру(в глобальном пространстве имён или в другом классе) с именем interfaceCall, которая принимает "ссылку"(или как это у вас называется) на объект, реализующий интерфейс IMyInterface. Эта процедура должна вызывать эту самую ф-цию foo c некоторым аргументом и выводить возвращённое значение на экран.
                            4. в произвольном месте создай объекты типа TMyImpl1 и TMyImpl2 и вызови процедуру interfaceCall сначала передав ей в качестве аргумента объект типа TMyImpl1, потом объект типа TMyImpl2.
                            Сообщение отредактировано: archimed7592 -
                              Цитата Smike @
                              Откуда же тебе известны такие тайны Delphi-компилятора?

                              Может для тебя это и тайна :)
                              Если знаешь ассемблер, то попробуй поработать вместо компилера, посмотрим с каким оверхедом у тебя получится код для работы с интерфейсами.
                                Цитата Alex Forth @
                                Если знаешь ассемблер

                                не пугай дельфинов этим словом;)
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (117) « Первая ... 66 67 [68] 69 70 ...  116 117
                                Закрыто archimed7592 11-03-2008: Лимит страниц. Продолжаем Delphi vs C++



                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1462 ]   [ 14 queries used ]   [ Generated: 5.08.25, 20:51 GMT ]