Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 75 76 [77] 78 79 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#1141
,
|
|
|
|
При переопределении виртуального метода inherited не пишут только в одном случае - если они точно знают что этот inherited делает и умышленно хотят это поведение подавить. Если забудут - так это применимо к любому виртуальному методу. Можно точно так же спросить, а что если программист переопределяя виртуальный метод забудет вызвать унаследованную реализацию? Тут что в Delphi, что в C# - эффект будет один и тот же. |
|
Сообщ.
#1142
,
|
|
|
|
Цитата --Ins-- @ Цитата D_KEY @ Предок выставляет свои поля в конструкторе напрямую, а modified ставиться в false. Потомки делают точно также, а свойство modified оказывается не измененным(false) Я переспросил потом, как оно оказывается неизмененным? Из-за чего? Из-за того, что вызывается конструктор базового класса? Из-за того, что его никто никогда и не ставил в true. Добавлено Цитата --Ins-- @ При переопределении виртуального метода inherited не пишут только в одном случае - если они точно знают что этот inherited делает и умышленно хотят это поведение подавить. |
|
Сообщ.
#1143
,
|
|
|
|
Да, --Ins--, как в твоем случае бороться с такой ситуацией:
![]() ![]() class base { /*...*/ public: base() { } void SetHeight(size_t H) { if(H > Height) ShrinkDocument(); Height = H; } }; class derived { /*...*/ public: derived() { SetHeight(100); //С каким значением сравнивается 100? } }; Добавлено Еще один аргумент не пользовать геттеры-сеттеры в конструкторах |
|
Сообщ.
#1144
,
|
|
|
|
Цитата D_KEY @ Нету в С++ интерфейсов. В С++ есть только абстрактные классы, которые могут обеспечить все, что обеспечивают интерфейсы. Я в курсе. Такой вопрос, а в c#? |
|
Сообщ.
#1145
,
|
|
|
|
Цитата MyNameIsIgor @ Ну, дык. Придут --Ins-- с DesweR'ом и расскажут тебе, какая она убогая в плюсах, как в шарп её украли из дельфи, в котором она "просто прекрасна, просто прекрасна!" Проходили уже... Ага! Кстати, недаром в D все классы используют только ссылочную модель, в угоду полиморфизма, а также наследуются от единого базового, неспроста и множественное наследование было пущено в расход А инновационные namespaces и не менее инновационные заголовочные файлы - были выпилены и заменены на более удобную и эффективную модульную систему (и раздельную компиляцию, при желании, с ними же). |
|
Сообщ.
#1146
,
|
|
|
|
Цитата --Ins-- @ Цитата D_KEY @ Нету в С++ интерфейсов. В С++ есть только абстрактные классы, которые могут обеспечить все, что обеспечивают интерфейсы. Я в курсе. Такой вопрос, а в c#? ![]() В C# есть, ибо в отсутствии множественного наследования без отдельного понятия интерфейсов тяжко, сам понимаешь. Добавлено Цитата DesweR @ Кстати, недаром в D все классы используют только ссылочную модель, в угоду полиморфизма И это отвращает от языка некоторых разработчиков Цитата а также наследуются от единого базового, неспроста и множественное наследование было пущено в расход Если мне не изменяет память, там развитые mixin'ы + возможность каста + шаблоны, множественное наследование может быть полностью воспроизведено в этих условиях. Цитата А инновационные namespaces и не менее инновационные заголовочные файлы - были выпилены и заменены на более удобную и эффективную модульную систему Не совсем так. Цитата Эта информация пока не подтвердилась.(и раздельную компиляцию, при желании, с ними же). Я говорю, в статье не все соответствует действительности. |
|
Сообщ.
#1147
,
|
|
|
|
Цитата D_KEY @ В C# есть, ибо в отсутствии множественного наследования без отдельного понятия интерфейсов тяжко, сам понимаешь. А абстрактные классы что означают? Цитата Мяут-Настоящий @ Еще один аргумент не пользовать геттеры-сеттеры в конструкторах Я с этим не спорю, конечно когда они делают что-то лишнее это лучше избежать. Пример мой видел? Как быть в этом случае в c++/c#? Повторю пример. У базового класса свойство Orientation с сеттером, меняющее приватное поле и Modified. Как мне в потомке выставить в конструкторе Orientation, чтобы не изменить Modified? Добавлено Цитата D_KEY @ там развитые mixin'ы Миксины - это что, агрегация? Так она много где используется, пуская в расход множественное наследование, и в Delphi тоже |
|
Сообщ.
#1148
,
|
|
|
|
Цитата --Ins-- @ Я же например могу в своем базовом классе решить задачу скажем сериализации объекта (полностью), в потомке мне для этого ни строчки кода написать не придется. А вот у с++ с этим бооольшие проблемы, насколько я понял Страниц 100 назад - это уже выяснялось, в С++ вообще принято (ну т.е. иначе нельзя) сбрасывать горы работы на плечи наследников и надеяться, что никто ничего не забудет дописать. Добавлено Цитата D_KEY @ И это отвращает от языка некоторых разработчиков Значит действительно хороший язык |
|
Сообщ.
#1149
,
|
|
|
|
Цитата --Ins-- @ Цитата D_KEY @ В C# есть, ибо в отсутствии множественного наследования без отдельного понятия интерфейсов тяжко, сам понимаешь. А абстрактные классы что означают? ![]() Тоже, что и в С++(да и везде) - базовые классы, не предполагающие создания своих экземпляров. Цитата Повторю пример. У базового класса свойство Orientation с сеттером, меняющее приватное поле и Modified. Как мне в потомке выставить в конструкторе Orientation, чтобы не изменить Modified? Это должен предполагать базовый класс и определить соответствующий конструктор. Если не предполагает, то, естественно, никак, ибо это будет противоречить логике его работы. Добавлено Цитата --Ins-- @ Цитата D_KEY @ там развитые mixin'ы Миксины - это что, агрегация? ![]() Это миксины |
|
Сообщ.
#1150
,
|
|
|
|
Цитата DesweR @ сбрасывать горы работы на плечи наследников и надеяться, что никто ничего не забудет дописать. Я и сам вижу В Delphi же принято решать задачу на том уровне абстракции, на котором она возникает, а не делегировать ее потомкам без необходимости, у которых и своих забот достаточно Добавлено Цитата D_KEY @ базовые классы, не предполагающие создания своих экземпляров. Ну так я это и сказал. Чего киллер ржал, не знаешь? |
|
Сообщ.
#1151
,
|
|
|
|
Цитата DesweR @ Цитата --Ins-- @ Я же например могу в своем базовом классе решить задачу скажем сериализации объекта (полностью), в потомке мне для этого ни строчки кода написать не придется. А вот у с++ с этим бооольшие проблемы, насколько я понял Страниц 100 назад - это уже выяснялось, в С++ вообще принято (ну т.е. иначе нельзя) сбрасывать горы работы на плечи наследников и надеяться, что никто ничего не забудет дописать. Нет Цитата Цитата D_KEY @ И это отвращает от языка некоторых разработчиков Значит действительно хороший язык ![]() Да, неплохой. Если бы там было все, о чем говорит Александреску... |
|
Сообщ.
#1152
,
|
|
|
|
Цитата D_KEY @ Это должен предполагать базовый класс и определить соответствующий конструктор. Т.е. если у меня в классе 20 параметров, я должен сделать двадцать конструкторов? Или один с 20-ю параметрами? Как будет правильнее? |
|
Сообщ.
#1153
,
|
|
|
|
Цитата --Ins-- @ Я и сам вижу В Delphi же принято решать задачу на том уровне абстракции, на котором она возникает, а не делегировать ее потомкам без необходимости, у которых и своих забот достаточно ![]() Ты так и не ответил, что у меня не так... Цитата Цитата D_KEY @ базовые классы, не предполагающие создания своих экземпляров. Ну так я это и сказал. Чего киллер ржал, не знаешь? ![]() Ему не нравится, что ты говоришь о реализации "абстрактных" действий. Это действительно не очень корректное выражение |
|
Сообщ.
#1154
,
|
|
|
|
Цитата D_KEY @ Да, неплохой. Если бы там было все, о чем говорит Александреску... Будем ждать D3 ![]() Скрытый текст возьму смелость и предположу - самый удачный и стабильный будет D7 |
|
Сообщ.
#1155
,
|
|
|
|
Цитата --Ins-- @ Цитата D_KEY @ Это должен предполагать базовый класс и определить соответствующий конструктор. Т.е. если у меня в классе 20 параметров, я должен сделать двадцать конструкторов? Или один с 20-ю параметрами? Как будет правильнее? ![]() Зависит от задачи. 20 параметров, конечно, не делается. Если у тебя так - надо что-то менять в дизайне. |