На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 180 181 [182] 183 184 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    Цитата DesweR @
    Вот если бы было так, недоразумений было бы меньше...
    Цитата
    void Func(Base& b)
    {
    b.Method();
    }

    int main()
    {
    Derive d;
    Func(&d);
    }

    А оно, в общем-то, есть.
    Цитата
    void Func(Base* b)
    {
    b->Method();
    }

    int main()
    {
    Derive d;
    Func(&d);
    }

    Соседство указателей и ссылок в С++ - отдельная песня :)

    Добавлено
    Цитата MyNameIsIgor @
    Написали "передать по значению родителя" - так вам и было сделано. Разрешили копирование полиморфного класса - он и скопировался.

    Нет. Я написал "передать в функцию объект, параметром которой является родитель этого объекта", перед этим определив виртуальный метод. А то, что по с++-вски это переводится так, как вы написали - грабли.

    Добавлено
    Цитата Flex Ferrum @
    Вот и в случае C++ не перестаёт.

    Однако
    Цитата Flex Ferrum @
    ЧУДО! ВСЁ ЗАРАБОТАЛО! Шайтнан...
    . А это противоречит утверждению:
    Цитата D_KEY @
    Требуешь создание нового объекта конкретного типа - какой тут полиморфизм?
    Сообщение отредактировано: IL_Agent -
      Цитата IL_Agent @
      Нет. Я написал "передать в функцию объект, параметром которой является родитель этого объекта"

      В ваших фантазиях там может быть хоть "вещь покрепче Фауста", а что было в реальности читайте в Стандарте.
      Цитата IL_Agent @
      А то, что по с++-вски это переводится так, как вы написали - грабли.

      Я вижу грабли только в вашем восприятии действительности.
        Цитата IL_Agent @
        А это противоречит утверждению

        Ничего ничему не противоречит. :) Тип определяет набор операций, которые доступны для конкретной переменной. Декларация аргумента определяет способ его передачи в функцию (по значению/ссылке/указателю).
          Цитата IL_Agent @
          Я написал "передать в функцию объект, параметром которой является родитель этого объекта"
          Вообще-то там написано "передать копию объекта типа Base"
            Цитата MyNameIsIgor @
            Лол? Смеяться надо? Я где-то говорил, что отличия синтаксические? Наоборот, я сказал, что одна и та же запись в плюсах и яве означает разные вещи.

            тогда прекратите задавать глупые вопросы
            Цитата

            Что значит "не так"? Синтаксис не тот? Что явно не надо указывать передачу по ссылке? Так и в шарпе точно так же.
            Ну, так а кто сказал, что синтаксис идентичен? Просто они построены на ссылочной семантике, а плюсы - на значениях. Ничего криминального не вижу - это просто надо знать.
            А по поводу логичности разделения в шарпе на ссылочные типы и значения уже обсуждалось...


            Цитата MyNameIsIgor @
            korvin, простите, я не имею желания разбирать ваше узелковое письмо, для которого даже подсветки нет.

            поэтому специально для Вас я сделал небольшой комментарий вконце.

            система типов тут при том, что если при тайпчеке происходит переписывание типа переменной, то при передаче по
            ссылке: реализация не приводится к супертипу
            значению: реализация не приводится к супертипу
            (это как в джаве)

            в противном случае при передаче по:
            ссылке: реализация не приводится к супертипу
            значению: реализация приводится к супертипу
            (это как в плюсах)

            интерфейс во всех случаях приводится. исключение -- языки с динамической типизацией

            Цитата MyNameIsIgor @
            Вы поясните при чём тут система типов или так и будете "иметь" и "получать"?

            я не понимаю, что ты подразумеваешь под этими словами

            Добавлено
            и это не зависит от семантики объектов, ссылки они или значения
              Цитата trainer @
              Вообще-то там написано "передать копию объекта типа Base"

              ExpandedWrap disabled
                void Func(Base b)

              Где написано "копия" ?

              ExpandedWrap disabled
                Derive d;
                Func(d);


              Где я передаю Base ?
              Сообщение отредактировано: IL_Agent -
                Цитата IL_Agent @
                Где написано "копия" ?
                А где написано ссылка?
                  Цитата MyNameIsIgor @
                  В ваших фантазиях там может быть хоть "вещь покрепче Фауста"

                  Цитата MyNameIsIgor @
                  Я вижу грабли только в вашем восприятии действительности.

                  Переход на личности засчитываем как слив :yes:
                    Цитата IL_Agent @
                    Где написано "копия" ?
                    Так претензия в том, что там нет в явном виде русского слова "копия"? т.е. по-твоему там для передачи копии должно было бы писаться так?
                    ExpandedWrap disabled
                      void Func(КОПИЯ! Base b)
                    Можно даже несколько вопросительных знаков, чтобы лучше видно было.
                      Цитата Повстанець @
                      А где написано ссылка?

                      Где я писал, что мне нужна ссылка ? Я передаю наследника с переопределённой виртуальной функцией и хочу, чтобы работал полиморфизм.
                        Цитата IL_Agent @
                        Где я писал, что мне нужна ссылка ? Я передаю наследника с переопределённой виртуальной функцией и хочу, чтобы работал полиморфизм.
                        Полиморфизм работает только через ссылки/указатели. Где написано, что там должна быть ссылка, или указатель?
                          Цитата IL_Agent @
                          Где написано "копия" ?

                          В учебнике по C?
                            Цитата Повстанець @
                            Полиморфизм работает только через ссылки/указатели.

                            Вот про эти грабли я и толкую.
                            А если полиморфизм не работает, зачем вообще разрешать передавать наследников без определения приведения типа ?
                              Цитата IL_Agent @
                              Вот про эти грабли я и толкую.
                              Про какие грабли? Полиморфизм везде работает через ссылки/указатели. Но в одних языках это дело под капотом, потому как все типы ссылочные. У некоторых открыта, потому как ссылочные типы надо объявлять вручную. А у некоторых ни тудым ни сюдым. Всегда надо помнить о двойственности системы типов. И соответственно о разных семантиках для одного синтаксиса.
                              Цитата IL_Agent @
                              А если полиморфизм не работает, зачем вообще разрешать передавать наследников без определения приведения типа ?
                              Разрешено всё, что не запрещено.
                                Цитата trainer @
                                Так претензия в том, что там нет в явном виде русского слова "копия"?

                                Претензия в том, что не работает полиморфизм.
                                Цитата trainer @
                                т.е. по-твоему там для передачи копии должно было бы писаться так?

                                По-моему, лучше так:
                                ExpandedWrap disabled
                                  Func( obj.Clone() );
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 180 181 [182] 183 184 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.2815 ]   [ 14 queries used ]   [ Generated: 31.07.26, 21:47 GMT ]