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

Страницы: (117) « Первая ... 76 77 [78] 79 80 ...  116 117  ( Перейти к последнему сообщению )  
> Delphi vs C++ , Часть 1
    Вот что интересно: если константный метод контейнера возвращает некоторый объект, можно ли у этого объекта дёрнуть неконстантные методы?
      Цитата wind @
      Вот что интересно: если константный метод контейнера возвращает некоторый объект, можно ли у этого объекта дёрнуть неконстантные методы?

      смотря какой объект вернул. Если вернул константный объект - то нельзя.
        Цитата wind @
        Вот что интересно: если константный метод контейнера возвращает некоторый объект, можно ли у этого объекта дёрнуть неконстантные методы?

        Если но возвращает неконстантный объект - то можно. В противном случае - нельзя.
          Цитата Romkin @
          Подобное можно сделать с помощью интерфейсов (да-да, опять :rolleyes:): написать интерфейс, включить в него нужные методы и передавать его.

          Опять полиморфный оверхед.


          Цитата wind @
          Вот что интересно: если константный метод контейнера возвращает некоторый объект, можно ли у этого объекта дёрнуть неконстантные методы?

          Если именно объект, то можно, но этот объект не должен быть константным... Если ссылку на объект, то зависит от того является ли она ссылкой на константный объект или нет. Если ссылку на объект, являющийся полем данного класса, то компилятор просто не позволит ему сделать это(в константных методах this имеет тип const T * и, соответственно, все поля становятся константными, но, есть исключения :)).


          Цитата LuckLess @
          не об ограничении.. а об отсуствии изменений.

          А как же mutable :tong:.
            Получается что-то подобное
            ExpandedWrap disabled
                IMyIntf = interface
                  function GetID: string;
                end;
               
                TMyClass = class(TObject, IMyintf)
                private
                  FID: string;
                protected
                  function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
                  function _AddRef: Integer; stdcall;
                  function _Release: Integer; stdcall;
               
                  function GetID: string;
                  procedure SetID(const Value: string);
                public
                  property ID: string read GetID write SetID;
                end;
               
              ...
               
                procedure DoWorkWithID(MyIntf: IMyIntf);
               
              ...
               
              var
                MyClass: TMyClass;
              begin
                MyClass := TMyClass.Create;
                try
                  MyClass.ID := 'AAA';
                  ShowMessage(MyClass.ID);
                  DoWorkWithID(MyClass);
                finally
                  MyClass.Free;
                end;
              end;


            Добавлено
            Цитата archimed7592 @
            Если именно объект, то можно, но этот объект не должен быть константным... Если ссылку на объект, то зависит от того является ли она ссылкой на константный объект или нет. Если ссылку на объект, являющийся полем данного класса, то компилятор просто не позволит ему сделать это(в константных методах this имеет тип const T * и, соответственно, все поля становятся константными, но, есть исключения ).

            Чур меня! :blink: :D
              Правда, хороший стиль предполагает, что, даже при использовании mutable после вызова константного метода поведение объекта не измениться(т.е. сколько раз константный метод не вызывай - будет возвращать одно и то же).

              Добавлено
              Цитата Romkin @
              Чур меня! :blink: :D

              Это ещё цветочки...

              Кстати, хороший стиль предполагает в любом методе в случае возвращения объекта(а не ссыки, к примеру) возвращать его именно константным :D.
                Цитата archimed7592 @
                А как же mutable :tong:.

                ну.. мутабл не относится к состоянию объекта, поэтому при изменении мутабл объект не меняется, и как следствие не меняется рекция этого объекта на вызовы. Не... ну конечно можно и константную функцию написать плохо)))... const_cast<A*> (this) и вперед.. :rolleyes:
                  И ты хочешь сказать, что это удобнее, чем явное разделение по интерфейсам, например?
                    Цитата Romkin @
                    И ты хочешь сказать, что это удобнее, чем явное разделение по интерфейсам, например?

                    в 1000 раз.
                      Цитата Romkin @
                      И ты хочешь сказать, что это удобнее, чем явное разделение по интерфейсам, например?

                      Конечно, удобнее.
                        Цитата Flex Ferrum @
                        Конечно, удобнее.

                        Что-то я сомневаюсь... В Delphi лучше не надо, лучше я отдам интерфейс, и пусть делают, что хотят: никаких исключений...
                          Цитата Romkin @
                          Цитата Flex Ferrum @
                          Конечно, удобнее.

                          Что-то я сомневаюсь... В Delphi лучше не надо, лучше я отдам интерфейс, и пусть делают, что хотят: никаких исключений...

                          Ради каждоого чиха интерфейс - так держать! :lool:
                            Цитата Alex Forth @
                            Ради каждоого чиха интерфейс - так держать!

                            Но если константные методы контейнера будут возвращать неконстантные объекты, то все усилия по обеспечению безопасности пойдут прахом. Поэтому точно так же придётся реализовывать дополнительный интерфейс.
                              Цитата Alex Forth @
                              Ради каждоого чиха интерфейс - так держать! :lool:

                              Просто мы мыслим различными категориями. Нужно меряться не возможностями языка, а реализацией конкретных алгоритмов на нем.

                              Добавлено
                              Мы вон с Флексом парсеры пишем, а Ромкин с Архимедом взяли бы и другие задачи рассмотрели. Было бы гораздо интереснее.
                                Цитата wind @
                                Но если константные методы контейнера будут возвращать неконстантные объекты, то все усилия по обеспечению безопасности пойдут прахом.

                                С чего бы вдруг? При возвращении объекта он копируется.

                                Цитата Romkin @
                                Что-то я сомневаюсь... В Delphi лучше не надо, лучше я отдам интерфейс, и пусть делают, что хотят: никаких исключений...

                                Ещё раз: интерфейс - это оверхэд. И намного накладнее(что проще - одно ключевое слово добавить или городить целый интерфейс?).

                                Добавлено
                                Цитата Smike @
                                Мы вон с Флексом парсеры пишем, а Ромкин с Архимедом взяли бы и другие задачи рассмотрели. Было бы гораздо интереснее.

                                Предлагай задачку :).
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (117) « Первая ... 76 77 [78] 79 80 ...  116 117
                                Закрыто archimed7592 11-03-2008: Лимит страниц. Продолжаем Delphi vs C++



                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1268 ]   [ 15 queries used ]   [ Generated: 2.08.25, 03:17 GMT ]