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

Страницы: (117) « Первая ... 49 50 [51] 52 53 ...  116 117  ( Перейти к последнему сообщению )  
> Delphi vs C++ , Часть 1
    Цитата Allexx @
    Я имел ввиду, что например С не вмешивается в код написанный программистом (за исключением оптимизаций, которые можно отключить).

    да ну?
    ExpandedWrap disabled
      class A
         {
      public:
         static unsigned int i;
       
         A (const A&)
            {
            ++i;
            }
       
         A ()
            {
       
            }
         };
       
      unsigned int A::i = 0;
       
      A f (A& a)
         {
         return a;
         }
       
      A ff (A& a)
         {
         return f (a);
         }
       
      A fff (A& a)
         {
         return ff (a);
         }
       
      int main ()
         {
         A a = fff (A ());
         std::cout << A::i;
         }

    каков будет результат??
    и где написано что эту оптимизацию можно отключить?
      Цитата LuckLess @
      но они там - не процедуры.

      Ну по большому счету Break & Continue тоже только с виду процедуры. Чтобы заявить, что это процедуры — нужно показать их реализацию.
      Цитата Allexx @
      Как это можно реализовать -- понятия не имею.

      array of const? Смотри функцию Format.
        Цитата daevaorn @
        println это не вмешательство, а детали реализации.

        ага... детали реализации, аж 3 раза...
        палец даю на отсечение, что writeln(10,10,'1234'); заменяется компилером на чегото типа
        intwrite(10);
        intwrite(10);
        strwrite('1234');

        и это не есть вмешательство??

        а компилер С, ничего не подменяет, компилит всё как есть, дословно можно сказать.
          Цитата Allexx @
          а компилер С, ничего не подменяет, компилит всё как есть, дословно можно сказать.

          откуда такая уверенность? твои дагадки, лишь ими и остаются. Магии в С не меньше, а в С++ и больше в разы.
            Цитата Allexx @
            а компилер С, ничего не подменяет, компилит всё как есть, дословно можно сказать.

            во.. еще лучше пример дословного компилирования
            меня даже удивил релультат моего компилятора :lool:
            ExpandedWrap disabled
              class A
                 {
              public:
                 static unsigned int i;
               
                 A (const A&)
                    {
                    ++i;
                    }
               
                 A ()
                    {
               
                    }
                 };
               
              unsigned int A::i = 0;
               
              int main ()
                 {
                 A a = A (A (A (A (A (A (A (A (A (A (A (A ())))))))))));
                 std::cout << A::i;
                 }


            Добавлено
            Цитата Smike @
            Ну по большому счету Break & Continue тоже только с виду процедуры. Чтобы заявить, что это процедуры — нужно показать их реализацию.

            а.. можно взять их адрес? (дельфи я не знаю, как и паскаль)
              Цитата Allexx @
              палец даю на отсечение, что writeln(10,10,'1234'); заменяется компилером на чегото типа

              Модуль System глянь, ага?
                Цитата Smike @
                Модуль System глянь, ага?

                ты про это:
                Цитата
                unit System; { Predefined constants, types, procedures, }
                { and functions (such as True, Integer, or }
                { Writeln) do not have actual declarations.}
                { Instead they are built into the compiler }
                { and are treated as if they were declared }
                { at the beginning of the System unit. }
                ?
                  Там есть:
                  ExpandedWrap disabled
                    function _WriteRec(var f: TFileRec; buffer: Pointer): Pointer;
                    function _WriteChar(var t: TTextRec; c: Char; width: Integer): Pointer;
                    function _Write0Char(var t: TTextRec; c: Char): Pointer;
                    function _WriteBool(var t: TTextRec; val: Boolean; width: Longint): Pointer;
                    function _Write0Bool(var t: TTextRec; val: Boolean): Pointer;
                    function _WriteLong(var t: TTextRec; val, width: Longint): Pointer;
                    function _Write0Long(var t: TTextRec; val: Longint): Pointer;
                    function _WriteString(var t: TTextRec; const s: ShortString; width: Longint): Pointer;
                    function _Write0String(var t: TTextRec; const s: ShortString): Pointer;
                    function _WriteCString(var t: TTextRec; s: PChar; width: Longint): Pointer;
                    function _Write0CString(var t: TTextRec; s: PChar): Pointer;
                    function _Write0LString(var t: TTextRec; const s: AnsiString): Pointer;
                    function _WriteLString(var t: TTextRec; const s: AnsiString; width: Longint): Pointer;
                    function _Write0WString(var t: TTextRec; const s: WideString): Pointer;
                    function _WriteWString(var t: TTextRec; const s: WideString; width: Longint): Pointer;
                    function _WriteWCString(var t: TTextRec; s: PWideChar; width: Longint): Pointer;
                    function _Write0WCString(var t: TTextRec; s: PWideChar): Pointer;
                    function _WriteWChar(var t: TTextRec; c: WideChar; width: Integer): Pointer;
                    function _Write0WChar(var t: TTextRec; c: WideChar): Pointer;
                    function _WriteVariant(var T: TTextRec; const V: TVarData; Width: Integer): Pointer;
                    function _Write0Variant(var T: TTextRec; const V: TVarData): Pointer;

                  Так что так и есть. :yes: Но ругать Дельфи тут незачто. Это скорее оставлено для совместимости с Паскалем. Хотя во многих случаях очень удобно. :yes:
                    Цитата Smike @
                    Там есть:
                    ExpandedWrap disabled
                      function _WriteRec(var f: TFileRec; buffer: Pointer): Pointer;
                      function _WriteChar(var t: TTextRec; c: Char; width: Integer): Pointer;
                      function _Write0Char(var t: TTextRec; c: Char): Pointer;
                      function _WriteBool(var t: TTextRec; val: Boolean; width: Longint): Pointer;
                      function _Write0Bool(var t: TTextRec; val: Boolean): Pointer;
                      function _WriteLong(var t: TTextRec; val, width: Longint): Pointer;
                      function _Write0Long(var t: TTextRec; val: Longint): Pointer;
                      function _WriteString(var t: TTextRec; const s: ShortString; width: Longint): Pointer;
                      function _Write0String(var t: TTextRec; const s: ShortString): Pointer;
                      function _WriteCString(var t: TTextRec; s: PChar; width: Longint): Pointer;
                      function _Write0CString(var t: TTextRec; s: PChar): Pointer;
                      function _Write0LString(var t: TTextRec; const s: AnsiString): Pointer;
                      function _WriteLString(var t: TTextRec; const s: AnsiString; width: Longint): Pointer;
                      function _Write0WString(var t: TTextRec; const s: WideString): Pointer;
                      function _WriteWString(var t: TTextRec; const s: WideString; width: Longint): Pointer;
                      function _WriteWCString(var t: TTextRec; s: PWideChar; width: Longint): Pointer;
                      function _Write0WCString(var t: TTextRec; s: PWideChar): Pointer;
                      function _WriteWChar(var t: TTextRec; c: WideChar; width: Integer): Pointer;
                      function _Write0WChar(var t: TTextRec; c: WideChar): Pointer;
                      function _WriteVariant(var T: TTextRec; const V: TVarData; Width: Integer): Pointer;
                      function _Write0Variant(var T: TTextRec; const V: TVarData): Pointer;

                    Так что так и есть. :yes: Но ругать Дельфи тут незачто. Это скорее оставлено для совместимости с Паскалем. Хотя во многих случаях очень удобно. :yes:

                    Smike, а полиморфизм в Delphi есть?
                      Цитата Alex Forth @
                      Smike, а полиморфизм в Delphi есть?

                      А почему бы ему не быть? :o

                      И кстати!
                      Цитата
                      Класс может наследовать функциональность от нескольких классов. Это называется множественным наследованием. Множественное наследование создаёт известную проблему (в C++), когда класс наследуется от нескольких классов-посредников, которые в свою очередь наследуются от одного класса. Если метод общего предка был переопределён в посредниках, неизвестно, какую реализацию метода должен наследовать общий потомок. Решается эта проблема путём отказа от множественного наследования для классов и разрешением множественного наследования для полностью абстрактных классов (т. н. интерфейсов) (C#, Delphi, Java).

                      Википедия
                        Цитата Alex Forth @
                        Smike, а полиморфизм в Delphi есть?

                        Да тут не полиморфизм, а простая перегрузка нужна...

                        Цитата Smike @
                        Если метод общего предка был переопределён в посредниках, неизвестно, какую реализацию метода должен наследовать общий потомок.

                        К чему цитата? :blink:
                        Да, попытка использовать неквалифицированное имя метода приведет к ошибке времени компиляции. А в чем проблема?
                          Цитата Smike @
                          Цитата Alex Forth @
                          Smike, а полиморфизм в Delphi есть?

                          А почему бы ему не быть? :o

                          Стоит посмотреть на список _WriteXXX и по этому поводу закрадываются сомения :D
                          Напомни, плз, как в Delphi обстоят дела с переменным числом аргументов для функции? Помойму паскаль такого неумеет.
                            Цитата Smike @
                            А почему бы ему не быть?

                            Alex Forth имел в виду перегрузку.
                              Цитата Smike @
                              Класс может наследовать функциональность от нескольких классов. Это называется множественным наследованием. Множественное наследование создаёт известную проблему (в C++), когда класс наследуется от нескольких классов-посредников, которые в свою очередь наследуются от одного класса. Если метод общего предка был переопределён в посредниках, неизвестно, какую реализацию метода должен наследовать общий потомок. Решается эта проблема путём отказа от множественного наследования для классов и разрешением множественного наследования для полностью абстрактных классов (т. н. интерфейсов) (C#, Delphi, Java).

                              Написан бред как обычно).
                              особено решение проблемы - класс.
                              Решается проблема строительства дома из бумаги - путем отказа от бумаги и замена бумаги деревом :lool:

                              Реально - проблема решается, хотя такой проблемы в принципе не существует, так как в цитате написан бред.
                              Цитата

                              Если метод общего предка был переопределён в посредниках, неизвестно, какую реализацию метода должен наследовать общий потомок.

                              он наследует ВСЁ что есть у базовых классоа. Обе реализации! если их две! Просто аффтар не знал С++.
                              А проблема видимо в том что если просто вызвать такую функцию - то будет неоднозначность.. какую именно функцию вызывать.. проблема решается просто, и кстати для этой проблемы вообще не одязятелен общий предок.

                              покажу одно из возможных решений проблемы - сокрытие имен
                              ExpandedWrap disabled
                                class C : public B1, public B2
                                   {
                                public:
                                   void f ()//предполагается что f () определена и в B1 и в B2
                                      {
                                      B2::f ();
                                      }
                                   };
                                int main ()
                                   {
                                   C c;
                                   c.f ();
                                   }


                              Добавлено
                              также можно использовать полностью квалифицированные имена.

                              Добавлено
                              еще проблема решается
                              ExpandedWrap disabled
                                public:
                                   using B2::f;
                              Сообщение отредактировано: LuckLess -
                                Цитата LuckLess @
                                особено решение проблемы - класс.

                                у интерфейса нет рализации, следовательно кроме сигнатуры ничего не наследуется, а значит нет неоднозначности в вызове.
                                Цитата LuckLess @
                                Реально - проблема решается, хотя такой проблемы в принципе не существует, так как в цитате написан бред.

                                А если метод не один? А несколько и для всех писать "пояснялку" компилятору в любой из форм?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (117) « Первая ... 49 50 [51] 52 53 ...  116 117
                                Закрыто archimed7592 11-03-2008: Лимит страниц. Продолжаем Delphi vs C++



                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0800 ]   [ 15 queries used ]   [ Generated: 12.08.25, 08:14 GMT ]