Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 192 193 [194] 195 196 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#2896
,
|
|
|
|
Цитата D_KEY @ Цитата Цитата Какой смысл в передаче объекта с виртуальными методами по значению предка? Брр. Никакого. И зачем программист это сделал? Затем, что вброс ![]() Гипотетически - с недостаточной силой нажал на кнопку Компилятор проглотил. Почему нельзя запретить компиляцию таких ситуаций ? Т.е. если я передаю по значению, то не делается никаких срезов по умолчанию, а выдаётся ошибка компиляции, такая, как если бы наследования здесь не было ? |
|
Сообщ.
#2897
,
|
|
|
|
Цитата IL_Agent @ Затем, что вброс Гипотетически - с недостаточной силой нажал на кнопку Компилятор проглотил. Почему нельзя запретить компиляцию таких ситуаций ? Т.е. если я передаю по значению, то не делается никаких срезов по умолчанию, а выдаётся ошибка компиляции, такая, как если бы наследования здесь не было ? Ну вот конструкция на делфях: ![]() ![]() if a > b then begin DoSomething(); end; Если чего, я там недожал символ <, там ведь предполагалось неравенство -> (if a <> b then), может такие случаи тоже запретим компилироваться? Добавлено Да и вообще, это оговорено в стандарте, в любом вшивеньком учебнике по С++, ты найдешь в чем заключается разница между передачей параметров по значению и по ссылке... Вполне ожидаемое поведение, а если ты символ не дожал - каши больше кушай, и причем тут язык не понятно, на себя в этом случае пенять нужно... |
|
Сообщ.
#2898
,
|
|
|
|
KILLER, неудачное сравнение. Твою ошибку невозможно выявить при компиляции.
|
|
Сообщ.
#2899
,
|
|
|
|
Цитата IL_Agent @ KILLER, неудачное сравнение. Твою ошибку невозможно выявить при компиляции. А твою возможно? Интересно как? |
|
Сообщ.
#2900
,
|
|
|
|
Цитата IL_Agent @ Затем, что вброс ![]() Гипотетически - с недостаточной силой нажал на кнопку Компилятор проглотил. Почему нельзя запретить компиляцию таких ситуаций ? Т.е. если я передаю по значению, то не делается никаких срезов по умолчанию, а выдаётся ошибка компиляции, такая, как если бы наследования здесь не было ? Как по-твоему выглядит прототип конструктора копирования ? Какую ошибку ты хочешь получить? Добавлено Цитата IL_Agent @ KILLER, неудачное сравнение. Твою ошибку невозможно выявить при компиляции. И твою тоже. Или нужно менять механизм конструктора копирования и передачи по значению, что скажется на не ООП части языка. Ку? Т.е. или отказываемся от семантики значений, унаследованной от С, усложняем создание нормальных пользовательских не ОО-типов, или же вносим в язык новые правила, отделяющие один вид пользовательских типов от всех остальных типов языка, что приведет к выделению ООП части от всего остального, наршению общности и стройности системы типов. И все ради того, чтобы программисту не пришлось использовать ссылки или указатели, которые все-равно нужны в языке, совместимым с С? Добавлено IL_Agent, как ты считаешь, нужно ли разделение на ссылочные и обычные типы и если да, то зачем оно? По крайней мере интересно, зачем нужны типы-значения, а не ссылки? |
|
Сообщ.
#2901
,
|
|
|
|
Цитата D_KEY @ Как по-твоему выглядит прототип конструктора копирования ? Да, точно, проблема имеет корни. |
|
Сообщ.
#2902
,
|
|
|
|
Цитата IL_Agent @ Цитата D_KEY @ Как по-твоему выглядит прототип конструктора копирования ? Да, точно, проблема имеет корни. А в чем проблема заключается? |
|
Сообщ.
#2903
,
|
|
|
|
Цитата D_KEY @ А в чем проблема заключается? Им доколупаца уже недочего |
|
Сообщ.
#2904
,
|
|
|
|
Цитата D_KEY @ IL_Agent, как ты считаешь, нужно ли разделение на ссылочные и обычные типы и если да, то зачем оно? Допускаю, что можно придумать решение и получше. На практике мне это никогда проблем не создавало. Цитата D_KEY @ По крайней мере интересно, зачем нужны типы-значения, а не ссылки? Ну а для чего они используются ? Если объект не большой и имеет простую структуру, то его лучше копировать при присваивании и размещать в стеке, чем в куще и тратить на него ресурсы менеджера памяти. |
|
Сообщ.
#2905
,
|
|
|
|
Цитата IL_Agent @ Цитата D_KEY @ IL_Agent, как ты считаешь, нужно ли разделение на ссылочные и обычные типы и если да, то зачем оно? Допускаю, что можно придумать решение и получше. На практике мне это никогда проблем не создавало. Когда я в "детстве" писал на встроенном бейсике, мне не создавало проблем даже отсутствие нормального понятия функции. Так что "проблем" оно тебе и не создаст - ибо авторы языка сделали так, что и не потребуется тебе сталкиваться с такими проблемами(например, обобщенный код, который мог бы от этого пострадать ты не напишешь), а заучить правило, сто раз повторяемое в любом учебнике по языку, трудности не составит. Цитата Т.е. решаем проблему кривой сборки мусора языковыми средствами? Замечательно. Цитата D_KEY @ По крайней мере интересно, зачем нужны типы-значения, а не ссылки? Ну а для чего они используются ? Если объект не большой и имеет простую структуру, то его лучше копировать при присваивании и размещать в стеке, чем в куще и тратить на него ресурсы менеджера памяти. |
|
Сообщ.
#2906
,
|
|
|
|
Вот именно: в 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 органично вписался в среду с автоматической сборкой мусора Все дело в том, что как я подозреваю, автоматический сборщик мусора должен быть внешним по отношению к приложению. В Delphi ничто не мешает замене менеджера памяти на другой или смене политики выделения памяти для иерархии объектов, собственно, я долгое время жил с заменой родного менеджера на FastMM, а сейчас он просто стал штатным. |
|
Сообщ.
#2907
,
|
|
|
|
Цитата Romkin @ Вот именно: в Delphi все время встречаешься с принципом, что бессмысленную конструкцию трудно написать. Язык не позволит. То есть не подход написал глупость - значит языка не знаешь, а подход что и не напишешь. Это упрощает язык, и упрощает общение с ним. Та ладно Вернемся к виртуальным конструкторам? Что будет если вызвался конструктор производного класса раньше чем конструктор базового инициализировал свой член, который конструктор производного, так тщетно пытается заюзать?А что будет если мы теперь удалим базовый класс, а производный все еще будет жить и использовать члены/методы базового? Это типо бессмысленную конструкцию трудно написать? Ну ну... Цитата Romkin @ А где написано, что должно быть автоматом? Это здравый смысл! Каждый раз все ручками удалять, можно ведь и запутаца... |
|
Сообщ.
#2908
,
|
|
|
|
Цитата Romkin @ Вот именно: в Delphi все время встречаешься с принципом, что бессмысленную конструкцию трудно написать. Вызов конструктора предка после потомка. Или вообще забыли вызвать конструктор предка. Простые примеры |
|
Сообщ.
#2909
,
|
|
|
|
Цитата KILLER @ Это здравый смысл! Каждый раз все ручками удалять, можно ведь и запутаца... Угу. Ресурсы - это не только память. Если ты путаешься что у тебя где создается - флаг в руки, автосборка не спасает от кривых ручек. Добавлено Цитата D_KEY @ Вызов конструктора предка после потомка. Или вообще забыли вызвать конструктор предка. Простые примеры Угу. А в С++ забыть нельзя? |
|
Сообщ.
#2910
,
|
|
|
|
Цитата Romkin @ Угу. Ресурсы - это не только память. Если ты путаешься что у тебя где создается - флаг в руки, автосборка не спасает от кривых ручек. Так я не путаюсь, у меня все довольно прозрачно, я знаю кто, где и когда создается, а вот вам, нужно смотреть в код, чтобы понять, что будет Цитата Romkin @ Угу. А в С++ забыть нельзя? Нет конечно, оно там автоматически вызывается в строго оговоренном порядке... |