На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 52 53 [54] 55 56 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    Цитата Мяут-Настоящий @
    Дык как быть, если модуль реализует всего один класс? :-)

    а что, это означает, что их нужно называть одинаково? кто этому обязал?
      Цитата D_KEY @
      --Ins--, покажи пример, в котором бы "легально"(без грязных хаков) компилятор давал изменять константные объекты?

      Скрытый текст
      ExpandedWrap disabled
        mutable
        Цитата Мяут-Настоящий @
        Цитата D_KEY @
        --Ins--, покажи пример, в котором бы "легально"(без грязных хаков) компилятор давал изменять константные объекты?

        Скрытый текст
        ExpandedWrap disabled
          mutable

        Я уже "намекал" на него. Но это - решение самого объекта, для специальных случаев, вроде кэширования или лени.
          Цитата korvin @
          а что, это означает, что их нужно называть одинаково? кто этому обязал?

          А как ты предлагаешь называть? ConfigurationParser, чтоб никто не догадался? ;)
          В С++ я могу сделать так:

          ExpandedWrap disabled
            #include <OptionParser.h>
             
            ...
             
            auto op = OptionParser();
            Цитата --Ins-- @
            D_KEY, я может чего не понял? Сначала, ты говоришь о невозможности изменить объект, который в подпрогрмму передается с const? Или о чем речь?

            Ты говоришь, что уже показал нам, что "защита" не работает. Я прошу показать.
              Цитата Мяут-Настоящий @
              Цитата D_KEY @
              --Ins--, покажи пример, в котором бы "легально"(без грязных хаков) компилятор давал изменять константные объекты?

              Скрытый текст
              ExpandedWrap disabled
                mutable

              т.е. можно гарантировать, что объект будет изменяем, даже если его передали как const? если да, то есть ли способ гарантировать, что объект не будет изменен, даже если он mutable? если да то, есть ли способ изменить объект, даже если он гарантировано защищен от изменений? если да, то... =)
                Цитата --Ins-- @
                Заметь, я на уровень указателей и ассемблерных вставок не опускался, я остался на уровне абстракции объектов ;) И нарушил, нет, не инкапсуляцию, она тут ни причем... А вашу "гарантию" :D

                Ничего ты не нарушил, ты просто вообще не понял о чем тебе D_KEY говорит!
                  Цитата korvin @
                  т.е. можно гарантировать, что объект будет изменяем, даже если его передали как const? если да, то есть ли способ гарантировать, что объект не будет изменен, даже если он mutable?

                  mutable все же для описанимя не логики объекта, а ее физики. Например блокировку, очевидно нужно мочь менять и в случае константности объекта ;)

                  Добавлено
                  На всякий случай замечу, что mutable прописывается полям.
                    Цитата --Ins-- @
                    D_KEY, идея константных объектов может и замечательная, но реализовать ее так, увы, невозможно :) Никто тебе не гарантирует ничего, ты можешь только надеяться. Так и говори "я надеюсь", а не "мне гарантировано". :D Я же говорю, никто не гарантирует неизменность объекта - это исключительно на совести программиста. Если нужно чтобы объект не изменялся - не передавай ссылку на него, передай значения нужных параметров
                    На совести какого программиста? Если ты хочешь, чтобы возвращённый по ссылке объект никто не менял, его никто не изменит независимо от совести. Вот как код D_KEYя:
                    ExpandedWrap disabled
                            class Rect
                            {
                            public:
                               //...
                               void SetRect(const Rect &rect);
                               const Rect & GetRect() const;
                            };
                    Состояние возвращённого из GetRect объекта не изменится. Это гарантия. В делфи, в аналогичной ситуации действительно стоит надеяться только на совесть программиста.
                      Цитата D_KEY @
                      Я прошу показать.


                      Речь идет о том, что объект переданный со словом const в методе не может быть изменен, так? Но вы же говорите что в этом методе можно дергать методы других объектов. А они то откуда знают, что менять объект нельзя? Допустим, мы вызвали какой-то метод, который, казалось бы, никакого отношения к константному объекту не имеет. А он - имел. Либо явно в своем коде, либо через каллбэк поменял значение изначального объекта. Это возможно?
                        Цитата Мяут-Настоящий @
                        А как ты предлагаешь называть? ConfigurationParser, чтоб никто не догадался? ;)
                        В С++ я могу сделать так:

                        ExpandedWrap disabled
                          #include <OptionParser.h>
                           
                          ...
                           
                          auto op = OptionParser();

                        и если тут же подключишь какой-нибудь "../OptionParser.h", который тоже экспортирует класс OptionParser, как быть?

                        но вообще меня вопрос натолкнул на другую мысль: в какой модуль поместить этот OptionParser, в Parser, где все парсеры или в Options, где все классы для работы с опциями? =) может неплохо было бы иметь тегированные пространства имен?
                          Цитата --Ins-- @
                          Речь идет о том, что объект переданный со словом const в методе не может быть изменен, так? Но вы же говорите что в этом методе можно дергать методы других объектов. А они то откуда знают, что менять объект нельзя?

                          Так ты можешь дергать только те методы, которые по такой же гарантии не имеют права изменять объект, иначе ошибка компиляции, тебе уже 3 раза это написали, я в четвертый пишу :wall:

                          Добавлено
                          Цитата --Ins-- @
                          Допустим, мы вызвали какой-то метод, который, казалось бы, никакого отношения к константному объекту не имеет. А он - имел.

                          не прокатят такие финты :-?
                            Цитата korvin @
                            может неплохо было бы иметь тегированные пространства имен?

                            т.е. например пишешь что-то типа
                            ExpandedWrap disabled
                              [Option, My, Parser, Class]

                            -- получаешь свой класс парсера опций

                            соответственно
                            ExpandedWrap disabled
                              import [Option, My, Class]

                            -- получаешь все свои классы для работы с опциями
                            ExpandedWrap disabled
                              import [Parser, My]

                            -- получаешь все свои определения (не только классы), связанные с парсерами

                            по-моему прикольно было б =)
                            вроде для перла есть пакет, позволяющий тегировать функции
                            Сообщение отредактировано: korvin -
                              Цитата KILLER @
                              Так ты можешь дергать только те методы, которые по такой же гарантии не имеют права изменять объект, иначе ошибка компиляции, тебе уже 3 раза это написали


                              Мне три раза написали, что методы других объектов, которые параметрами нас не принимают, МОЖНО вызывать. :)
                                Цитата --Ins-- @
                                Мне три раза написали, что методы других объектов, которые параметрами нас не принимают, МОЖНО вызывать. :)

                                Параметр - это лишь один из способов поиметь объект, еще можно напрямую присвоить...
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 52 53 [54] 55 56 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.1619 ]   [ 15 queries used ]   [ Generated: 29.07.26, 10:52 GMT ]