Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 273 274 [275] 276 277 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#4111
,
|
|
|
|
Конструктор CreateClass отработал, поверь Цитата D_KEY @ Конструктор не является методом объекта(и не может им являться, поскольку этот объект конструирует). В С++ да. Только если метод не затрагивает инварианты. Серьёзно? И какой-нибудь "WriteLn(Self.ClassName)" в конструкторе базового класса нам выдаст его же имя, вместо производного? Мы ещё не видели варианты на C++/C#/Java |
|
Сообщ.
#4112
,
|
|
|
|
Ощущение дежа-вю...
|
|
Сообщ.
#4113
,
|
|
|
|
Цитата Flex Ferrum @ Ощущение дежа-вю... Матрица опять глючит. Боюсь обернуться - вдруг там Смит с пистолетом |
|
Сообщ.
#4114
,
|
|
|
|
Цитата Flex Ferrum @ Ощущение дежа-вю... Это всё D_KEY |
|
Сообщ.
#4115
,
|
|
|
|
Цитата DesweR @ Конструктор CreateClass отработал, поверь ![]() А причем тут он, если речь об объекте, а не классе? Цитата Цитата D_KEY @ Конструктор не является методом объекта(и не может им являться, поскольку этот объект конструирует). В С++ да. Причем тут язык? Если конструктор не конструирует, то это не конструктор. Цитата Откуда ты это знаешь, если метод не твоего класса, а производного? Конструктор же не отработал, следовательно, нельзя сказать, что инварианты выполнены.Только если метод не затрагивает инварианты. Цитата Производного. И правильно сделает. А вот виртуальные методы несконструированного объекта вызывать странно. Серьёзно? И какой-нибудь "WriteLn(Self.ClassName)" в конструкторе базового класса нам выдаст его же имя, вместо производного? Добавлено Цитата DesweR @ Цитата Flex Ferrum @ Ощущение дежа-вю... Это всё D_KEY ![]() Я всего-лишь сказал, что написано в некоторой книге(которую тут упомянул не я), у тебя же начался очередной батхерт и ты обвинил меня во лжи |
|
Сообщ.
#4116
,
|
|
|
|
Цитата D_KEY @ А причем тут он, если речь об объекте, а не классе? Он конструирует экземпляр класса. Цитата D_KEY @ Причем тут язык? Если конструктор не конструирует, то это не конструктор. Да ладно?! Цитата D_KEY @ Откуда ты это знаешь, если метод не твоего класса, а производного? Производный знает, иначе ССЗБ. Цитата D_KEY @ Производного. И правильно сделает. Ну и где "такая же стратегия конструирования объектов"? Цитата D_KEY @ Я всего-лишь сказал, что написано в некоторой книге(которую тут упомянул не я), у тебя же начался очередной батхерт и ты обвинил меня во лжи Какой невинный трололо Добавлено D_KEY Всё, давай закруглять разговор. Добавлено Лучше вот: Цитата DesweR @ Мы ещё не видели варианты на C++/C#/Java |
|
Сообщ.
#4117
,
|
|
|
|
Цитата DesweR @ Цитата D_KEY @ А причем тут он, если речь об объекте, а не классе? Он конструирует экземпляр класса. Конструирует не конструктор. Ок. Цитата Цитата D_KEY @ Причем тут язык? Если конструктор не конструирует, то это не конструктор. Да ладно?! Ну как бы это следует из определения конструктора и его названия. Цитата Цитата D_KEY @ Откуда ты это знаешь, если метод не твоего класса, а производного? Производный знает, иначе ССЗБ. Но производный не знает, что ты в своем конструкторе можешь дергать его методы. Цитата Цитата D_KEY @ Производного. И правильно сделает. Ну и где "такая же стратегия конструирования объектов"? Такая же - там точно так же и в таком же порядке происходит конструирование, как я описал выше. Инициализацию таблиц виртуальных функций я не упоминал - там есть отличие. И Брюсу Эккелю как раз не нравится поведение в Java и он пишет, что в С++ этот момент продуман лучше. Это все, что я говорил. Цитаты я показал. С чем ты споришь? С Эккелем? Ну так ему и пиши Цитата Цитата D_KEY @ Я всего-лишь сказал, что написано в некоторой книге(которую тут упомянул не я), у тебя же начался очередной батхерт и ты обвинил меня во лжи Какой невинный трололо А что, разве не так? Цитата Давай D_KEY Всё, давай закруглять разговор. Цитата Лучше вот: Цитата DesweR @ Мы ещё не видели варианты на C++/C#/Java Не вижу смысла в таком поведении. |
|
Сообщ.
#4118
,
|
|
|
|
Цитата D_KEY @ Ну как бы это следует из определения конструктора и его названия. Код CreateClass вставляет сам компилятор (нам вообще незачем о нём знать), это точно также, как и в С++, только у вас он вставляется перед всеми конструкторами. Цитата D_KEY @ Но производный не знает, что ты в своем конструкторе можешь дергать его методы. Это следует из документации. Такой проблемы у меня вообще никогда не возникало или ты всегда переопределяешь вирт. методы не думая? Цитата D_KEY @ Не вижу смысла в таком поведении. Суть не в исключениях, вся изюминка в классовых ссылках, попробуешь реализовать посредством фабрик? |
|
Сообщ.
#4119
,
|
|
|
|
Цитата DesweR @ Мы ещё не видели варианты на C++/C#/Java ![]() вообще мы уже выяснили, что в джаве искаробки идет проверка на неправильный порядок отлова исключений. меня это вполне устраивает. если подумать, то это даже лучше, чем автоматическая перестановка местами. гораздо лучше. ну а вторая часть вопроса в такой ситуации отпадает Добавлено в то время как делфи на такой код: ![]() ![]() try raise EDivByZero.Create('Error Message'); except on e : Exception do ShowMessage('Exception ' + e.Message); on e : EDivByZero do ShowMessage('DivByZero ' + e.Message); end; даже хинта не выдает... Добавлено при том, что даже динамический CL позволяет выявлять такие ситуации в compile-time... Скрытый текст ![]() ![]() (defun already-caught (cond-type cases) (labels ((test (case) (subtypep cond-type (car case)))) (some #'test cases))) (defmacro handler-case* (expression &body cases) (loop :for ((cond-type . rest) . rest-cases) :on (reverse cases) :when (already-caught cond-type rest-cases) :do (error "Condition ~a already cauth in:~%~a" cond-type rest-cases)) `(handler-case ,expression ,@cases)) компиляция такого файла: ![]() ![]() (defun test-conditions () (handler-case* (signal (make-condition 'simple-error)) (error () 'error) (simple-error () 'simple))) не пройдет =) Добавлено и еще при том, что IDEA, например, сообщает о неправильном порядке еще во время редактирования кода и предлагает переставить более специфический кетч перед более общим =) |
|
Сообщ.
#4120
,
|
|
|
|
Цитата DesweR @ Цитата D_KEY @ Ну как бы это следует из определения конструктора и его названия. Код CreateClass вставляет сам компилятор (нам вообще незачем о нём знать), это точно также, как и в С++, только у вас он вставляется перед всеми конструкторами. Но у нас до вызова конструктора объекта нет - есть только память. Цитата Цитата D_KEY @ Не вижу смысла в таком поведении. Суть не в исключениях, вся изюминка в классовых ссылках, попробуешь реализовать посредством фабрик? Причем тут фабрики? А реализовывать подобные костыли я желания не испытываю Добавлено Цитата korvin @ и еще при том, что IDEA, например, сообщает о неправильном порядке еще во время редактирования кода и предлагает переставить более специфический кетч перед более общим =) |
|
Сообщ.
#4121
,
|
|
|
|
Цитата korvin @ и еще при том, что IDEA, например, сообщает о неправильном порядке еще во время редактирования кода и предлагает переставить более специфический кетч перед более общим =) Ты что! За IDEA надо же бабло платить! Рассово верные делфисты работают только на пиратке, при этом бьют себя пяткой в грудь, что производитель на продаже делфи подымает бабло на её развитие. |
|
Сообщ.
#4122
,
|
|
|
|
Цитата Вуйко з полонини @ Ты что! За IDEA надо же бабло платить! Рассово верные делфисты работают только на пиратке, при этом бьют себя пяткой в грудь, что производитель на продаже делфи подымает бабло на её развитие. Указанная мной возможность имеется и в бесплатной Community Edition, а если "Расово верные делфисты работают только на пиратке", то не побрезгуют и CE использовать в коммерческих целях =) |
|
Сообщ.
#4123
,
|
|
|
|
Цитата korvin @ даже хинта не выдает... Пичально, но не критично. Цитата D_KEY @ Но у нас до вызова конструктора объекта нет - есть только память. А что у вас находится между вызовом конструктора и самим конструктором? hint: "это" генерирует компилятор Цитата D_KEY @ А реализовывать подобные костыли я желания не испытываю В С++ это не реализуемо. |
|
Сообщ.
#4124
,
|
|
|
|
Цитата DesweR @ Пичально, но не критично. помнить наизусть дерево классов исключений всяко лучше, ясен пень Добавлено и при подключении сторонних модулей, содержащих свои классы исключений, в обязательном порядке изучать их, а не просто пользоваться |
|
Сообщ.
#4125
,
|
|
|
|
Цитата DesweR @ В С++ это не реализуемо. Великий знаток плюсов детектед |