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

    Никакого. И зачем программист это сделал?

    Затем, что вброс :)
    Гипотетически - с недостаточной силой нажал на кнопку :) Компилятор проглотил.
    Почему нельзя запретить компиляцию таких ситуаций ? Т.е. если я передаю по значению, то не делается никаких срезов по умолчанию, а выдаётся ошибка компиляции, такая, как если бы наследования здесь не было ?
      Цитата IL_Agent @
      Затем, что вброс
      Гипотетически - с недостаточной силой нажал на кнопку Компилятор проглотил.
      Почему нельзя запретить компиляцию таких ситуаций ? Т.е. если я передаю по значению, то не делается никаких срезов по умолчанию, а выдаётся ошибка компиляции, такая, как если бы наследования здесь не было ?

      :lol: :lool:
      Ну вот конструкция на делфях:
      ExpandedWrap disabled
        if a > b then
        begin
          DoSomething();
        end;

      Если чего, я там недожал символ <, там ведь предполагалось неравенство -> (if a <> b then), может такие случаи тоже запретим компилироваться? :crazy:

      Добавлено
      Да и вообще, это оговорено в стандарте, в любом вшивеньком учебнике по С++, ты найдешь в чем заключается разница между передачей параметров по значению и по ссылке... Вполне ожидаемое поведение, а если ты символ не дожал - каши больше кушай, и причем тут язык не понятно, на себя в этом случае пенять нужно... ;)
        KILLER, неудачное сравнение. Твою ошибку невозможно выявить при компиляции.
          Цитата IL_Agent @
          KILLER, неудачное сравнение. Твою ошибку невозможно выявить при компиляции.

          А твою возможно? Интересно как? :whistle:
            Цитата IL_Agent @
            Затем, что вброс :)
            Гипотетически - с недостаточной силой нажал на кнопку :) Компилятор проглотил.
            Почему нельзя запретить компиляцию таких ситуаций ? Т.е. если я передаю по значению, то не делается никаких срезов по умолчанию, а выдаётся ошибка компиляции, такая, как если бы наследования здесь не было ?

            Как по-твоему выглядит прототип конструктора копирования ;) ? Какую ошибку ты хочешь получить?

            Добавлено
            Цитата IL_Agent @
            KILLER, неудачное сравнение. Твою ошибку невозможно выявить при компиляции.

            И твою тоже. Или нужно менять механизм конструктора копирования и передачи по значению, что скажется на не ООП части языка. Ку?
            Т.е. или отказываемся от семантики значений, унаследованной от С, усложняем создание нормальных пользовательских не ОО-типов, или же вносим в язык новые правила, отделяющие один вид пользовательских типов от всех остальных типов языка, что приведет к выделению ООП части от всего остального, наршению общности и стройности системы типов.
            И все ради того, чтобы программисту не пришлось использовать ссылки или указатели, которые все-равно нужны в языке, совместимым с С?

            Добавлено
            IL_Agent, как ты считаешь, нужно ли разделение на ссылочные и обычные типы и если да, то зачем оно? По крайней мере интересно, зачем нужны типы-значения, а не ссылки?
            Сообщение отредактировано: D_KEY -
              Цитата D_KEY @
              Как по-твоему выглядит прототип конструктора копирования ;) ?

              Да, точно, проблема имеет корни.
                Цитата IL_Agent @
                Цитата D_KEY @
                Как по-твоему выглядит прототип конструктора копирования ;) ?

                Да, точно, проблема имеет корни.

                А в чем проблема заключается?
                  Цитата D_KEY @
                  А в чем проблема заключается?

                  Им доколупаца уже недочего :ph34r:
                    Цитата D_KEY @
                    IL_Agent, как ты считаешь, нужно ли разделение на ссылочные и обычные типы и если да, то зачем оно?

                    Допускаю, что можно придумать решение и получше. На практике мне это никогда проблем не создавало.

                    Цитата D_KEY @
                    По крайней мере интересно, зачем нужны типы-значения, а не ссылки?

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

                      Допускаю, что можно придумать решение и получше. На практике мне это никогда проблем не создавало.

                      Когда я в "детстве" писал на встроенном бейсике, мне не создавало проблем даже отсутствие нормального понятия функции. Так что "проблем" оно тебе и не создаст - ибо авторы языка сделали так, что и не потребуется тебе сталкиваться с такими проблемами(например, обобщенный код, который мог бы от этого пострадать ты не напишешь), а заучить правило, сто раз повторяемое в любом учебнике по языку, трудности не составит.

                      Цитата
                      Цитата D_KEY @
                      По крайней мере интересно, зачем нужны типы-значения, а не ссылки?

                      Ну а для чего они используются ? Если объект не большой и имеет простую структуру, то его лучше копировать при присваивании и размещать в стеке, чем в куще и тратить на него ресурсы менеджера памяти.
                      Т.е. решаем проблему кривой сборки мусора языковыми средствами? Замечательно.
                        Цитата D_KEY @
                        Никакого. И зачем программист это сделал?

                        Вот именно: в Delphi все время встречаешься с принципом, что бессмысленную конструкцию трудно написать. Язык не позволит. То есть не подход написал глупость - значит языка не знаешь, а подход что и не напишешь. Это упрощает язык, и упрощает общение с ним.

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

                        Не знаю такого деления. Что значит обычные и нет? Типы в Delphi:
                        Цитата
                        Simple Types
                        String Types
                        Structured Types
                        Pointers and Pointer Types
                        Procedural Types
                        Variant Types
                        Classes and Objects
                        Object Interfaces
                        Generics
                        Attributes

                        Все. По каждому пункту - страничка-другая информации. Пара десятков страниц - и у тебя нет вопросов, как что работает. А сколько страниц в С++ описывает, как работают его типы без деления?
                        Цитата KILLER @
                        Ты вот только ответь на один вопрос, почему в Делфийских, классных, красивых классах, которым С++'ные в подметки не годятся, нужно уничтожать все в ручную ?

                        А где написано, что должно быть автоматом? Да, с призмой я особо не знаком, но что-то мне подсказывает, что там объекты сборщиком мусора уничтожаются. Хотя бы потому что наследование идет от дотнетовского System.Object. То есть Delphi органично вписался в среду с автоматической сборкой мусора :tong:
                        Все дело в том, что как я подозреваю, автоматический сборщик мусора должен быть внешним по отношению к приложению.
                        В Delphi ничто не мешает замене менеджера памяти на другой или смене политики выделения памяти для иерархии объектов, собственно, я долгое время жил с заменой родного менеджера на FastMM, а сейчас он просто стал штатным.
                          Цитата Romkin @
                          Вот именно: в Delphi все время встречаешься с принципом, что бессмысленную конструкцию трудно написать. Язык не позволит. То есть не подход написал глупость - значит языка не знаешь, а подход что и не напишешь. Это упрощает язык, и упрощает общение с ним.

                          Та ладно :D Вернемся к виртуальным конструкторам? Что будет если вызвался конструктор производного класса раньше чем конструктор базового инициализировал свой член, который конструктор производного, так тщетно пытается заюзать?
                          А что будет если мы теперь удалим базовый класс, а производный все еще будет жить и использовать члены/методы базового? Это типо бессмысленную конструкцию трудно написать? Ну ну...

                          Цитата Romkin @
                          А где написано, что должно быть автоматом?

                          Это здравый смысл! Каждый раз все ручками удалять, можно ведь и запутаца...
                            Цитата Romkin @
                            Цитата D_KEY @
                            Никакого. И зачем программист это сделал?

                            Вот именно: в Delphi все время встречаешься с принципом, что бессмысленную конструкцию трудно написать.

                            Вызов конструктора предка после потомка. Или вообще забыли вызвать конструктор предка.
                            Простые примеры ;)
                              Цитата KILLER @
                              Это здравый смысл! Каждый раз все ручками удалять, можно ведь и запутаца...

                              Угу. Ресурсы - это не только память. Если ты путаешься что у тебя где создается - флаг в руки, автосборка не спасает от кривых ручек.

                              Добавлено
                              Цитата D_KEY @
                              Вызов конструктора предка после потомка. Или вообще забыли вызвать конструктор предка.
                              Простые примеры

                              Угу. А в С++ забыть нельзя?
                                Цитата Romkin @
                                Угу. Ресурсы - это не только память. Если ты путаешься что у тебя где создается - флаг в руки, автосборка не спасает от кривых ручек.

                                Так я не путаюсь, у меня все довольно прозрачно, я знаю кто, где и когда создается, а вот вам, нужно смотреть в код, чтобы понять, что будет ;)

                                Цитата Romkin @
                                Угу. А в С++ забыть нельзя?

                                Нет конечно, оно там автоматически вызывается в строго оговоренном порядке...
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 192 193 [194] 195 196 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.3142 ]   [ 15 queries used ]   [ Generated: 1.08.26, 02:55 GMT ]