Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 70 71 [72] 73 74 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#1066
,
|
|
|
|
Ты вообще не понимаешь о чем споришь? Ты привел конкретную задачу, и сказал сделайте мне ее, я тебя спрашиваю, для чего мне нужно выставлять твой параметр modify в истину или в лож в конструкторе класса? Для чего? Цитата --Ins-- @ (ну мало ли, в рантайм юзер изменит размер документа, нужно пометить документ как измененный). И ахтунг! Да ахтунг! Причем тут рантайм и конструктор класса? ты на вопрос Зачем ответь Добавлено Цитата --Ins-- @ Я тебе говорил то же самое, но ты утверждал, что это - единичные случаи Или не говорил ты такого? Ты когда пишешь ты вообще читаешь? Да я это говорил, теперь ответь мне на вопрос, где я говорил чт она Делфи кроме как мышкотыкать более программить нельзя никак. Где я такое говорил? Выдели жирненьким |
|
Сообщ.
#1067
,
|
|
|
|
Ты видимо не понял задачу. Код потомка у тебя может дергать другие параметры. У тебя base-конструктор вызовется РАНЬШЕ, чем конструктор потомка, а значит то, что будет вызвано вот здесь: Спокойненько поменяет Modified. там например может свойтсво Description установится. Как мне сделать чтобы независимо от этого после выполнения любого конструктора Modified был сброшен? |
|
Сообщ.
#1068
,
|
|
|
|
Цитата --Ins-- @ Поясняю. Есть класс Document. У него есть свойства Width, Height, к примеру. Эти свойства в сеттерах изменяют статус Modified (ну мало ли, в рантайм юзер изменит размер документа, нужно пометить документ как измененный). И ахтунг! Эти же свойства (а может и некоторые другие, а может потомок еще и свои введет) устанавливаются в конструкторе. Как бы так извратиться, чтобы после выполнения конструктора Modified был бы сброшен в false? Все-равно не совсем понимаю... ![]() ![]() class Document : boost::nocopyable { public: Document() : m_width(...), m_height(...), m_modified(false), { } void SetWidth(int width) { SetParam(&m_width, width); } void SetHeight(int height) { SetParam(&m_height, height); } ... protected: template<typename T> void SetParam(T *param, const T & value) { if (param != 0 && *param != value) { *param = value; m_modified = true; } } private: int m_width; int m_height; bool m_modified; }; Мог опечататься. Что исправить, чтобы было как у тебя? Цитата У тебя принципы сформированы под влиянием плохих инструментов Принципы, которые я озвучиваю, придуманы не мной. Ссылки на различные источники я давал, и книг исключительно по С++ среди них не было. Цитата Какие подходы? Вызов методов несконструированных объектов? Или может написания небезопасного в смысле исключений кода? Нет, спасибо. Ты другие подходы никогда не пробовал, и тем не менее пытаешься судить. Ты использовал когда нибудь то, о чем я тебе говорю? Нет? Так попробуй, прочувствуй, и тогда уже делай выводы соответствует или нет |
|
Сообщ.
#1069
,
|
|
|
|
--Ins--, ты предлагаешь, чтобы у тебя в конструкторе, вернее и у нас тоже - содержалось половина бизнес логики программы, а я тебя спрашиваю - Зачем мне такой "профессиональный" подход?? Зачем мне в конструкторе писать функциональность, если конструктор нужен для создания и инициализации экземпляра класса???
|
|
Сообщ.
#1070
,
|
|
|
|
Цитата KILLER @ для чего мне нужно выставлять твой параметр modify в истину или в лож в конструкторе класса? Для чего? А я думал что это понятно даже киллерам. Создай документ Word. Он после создания не помечен как изменненный. Поменяй параметры страницы на альбомную - он пометится как измененный. В то же время если ты бы с самого начала создал альбомный документ - он бы измененным не был. Я хочу в программе то же самое. Что бы я не задал в конструкторе, изменения параметров не должно менять статус документа. |
|
Сообщ.
#1071
,
|
|
|
|
Цитата --Ins-- @ Как мне сделать чтобы независимо от этого после выполнения любого конструктора Modified был сброшен? А тебе не кажется, что это должен решать потомок? |
|
Сообщ.
#1072
,
|
|
|
|
Цитата --Ins-- @ В С++ -- никак. В С++ конструирование идёт древовидно, опираясь на иерархию класса. Спагеттиподобное конструирование на С++ никак не осилить без гемороя. Спокойненько поменяет Modified. там например может свойтсво Description установится. Как мне сделать чтобы независимо от этого после выполнения любого конструктора Modified был сброшен? |
|
Сообщ.
#1073
,
|
|
|
|
Цитата --Ins-- @ Цитата KILLER @ для чего мне нужно выставлять твой параметр modify в истину или в лож в конструкторе класса? Для чего? А я думал что это понятно даже киллерам. Создай документ Word. Он после создания не помечен как изменненный. Поменяй параметры страницы на альбомную - он пометится как измененный. В то же время если ты бы с самого начала создал альбомный документ - он бы измененным не был. Я хочу в программе то же самое. Что бы я не задал в конструкторе, изменения параметров не должно менять статус документа. Это может решить только потомок. Но если очень надо, можешь добавить код сброса флага модификации в фабрике документов(она же у тебя будет, правда ?). |
|
Сообщ.
#1074
,
|
|
|
|
Цитата --Ins-- @ Создай документ Word. Он после создания не помечен как изменненный. --Ins--, вдумайся в эту фразу и пойми, что вот этот сценарий - это результат работы конструктора, а ты хочешь сделать тоже самое но через жопу, перенеся половину бизнес логики на плечи конструктора базового класса |
|
Сообщ.
#1075
,
|
|
|
|
Цитата D_KEY @ Какие подходы? Вызов методов несконструированных объектов? Эти методы и осуществляют конструирование Но куда тебе такое осознать... Добавлено Цитата D_KEY @ А тебе не кажется, что это должен решать потомок? Нет, не кажется. Еще вопросы? А тебе не кажется что это должен решить предок? Зачем потомку что-то специально предпринимать, если предок в состоянии об этом позаботится? Ну, если не в состоянии, то понятно Добавлено Цитата KILLER @ -Ins--, вдумайся в эту фразу и пойми, что вот этот сценарий - это результат работы конструктора Я это понимаю. Теперь пойми это и ты |
|
Сообщ.
#1076
,
|
|
|
|
Цитата --Ins-- @ Цитата D_KEY @ Какие подходы? Вызов методов несконструированных объектов? Эти методы и осуществляют конструирование Но куда тебе такое осознать...Чего тут осознавать-то? Я в питоне и яве такое тоже сделать могу. Вот только зачем? Почему методы занимаются конструированием? Если это методы класса, то понятно, но если методы несуществующего еще объекта, то... Добавлено Напомнило: Цитата ...если я, вместо того, чтобы оперировать каждый вечер, начну у себя в квартире петь хором, у меня настанет разруха... |
|
Сообщ.
#1077
,
|
|
|
|
Цитата D_KEY @ Ага. До этого холивара - точно были. Как-никак, на 2-м и 5-м приходилось пописывать, на 7-м - чуток посопровождать после одного такого формошлёпа "Дельфифобов" я практически не встречал. Все так или иначе использовали эту среду разработки и у большинства остались теплые чувства. . Слава богу, вскоре сменил работу и вернулся к C/C++, поднимать свой левел под нужный порог. Пять лет назад это было. Не жалею нисколечки. |
|
Сообщ.
#1078
,
|
|
|
|
Цитата --Ins-- @ Зачем потомку что-то специально предпринимать, если предок в состоянии об этом позаботится? Поясню. Термин Modified вводится на уровне абстракции предка. Предок и берет на себя все функции управления этим состоянием, а не делегирует эту работу потомкам. Потомок это чисто наследует и использует. У потомка свои задачи, которые на уже его уровне абстракции вводятся, если ему еще и решать часть задач предка - то это точно галимое проектирование |
|
Сообщ.
#1079
,
|
|
|
|
Впрочем, не думаю, что Дельфи в этом повинен. Скорее, стиль этого холивара. И твердолобость некоторых участников вкупе с самомнением.
|
|
Сообщ.
#1080
,
|
|
|
|
Цитата --Ins-- @ Я это понимаю. Теперь пойми это и ты Ты прикидываешься? ну ок, самый простой вариант, даже не думая:![]() ![]() class CMSWord : public ISomeInterface { public: CMSWord() : m_modify(false) { CreateClearPage(); } void CreateClearPage() { pMyContext->CreatePage(); } void OnUserChange() { m_modify = true; } void OnSave() { m_modify = false; } }; Я решил твою задачу? Добавлено Цитата --Ins-- @ Поясню. Термин Modified вводится на уровне абстракции предка. --Ins--, уже становится страшно, мы помним как ты проектировал геометрические фигуры, и когда класс АбстрактнаяФигура у тебя рисовал по умолчанию круг |