![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: нет Всего: 32 |
Не нашел такой темы...
как в с++ запретить наследование класса? в .net эта штука, насколько я понимаю называется sealed. А как здесь? Это сообщение отредактировал(а) Fedor - 17.6.2007, 12:26 -------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: нет Всего: 32 |
типа
?? Добавлено через 4 минуты и 3 секунды Хотя так не пойдет... В общем, как это фабричный метод? ) -------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
| Xenon |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Я понимаю так.
Добавлено через 1 минуту и 53 секунды Ну или так:
|
||||
|
|||||
| Feniksa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 12.6.2007 Репутация: нет Всего: нет |
Fedor, а какой компилятор используеш?
|
|||
|
||||
| Damarus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: 6 Всего: 29 |
||||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Если комилятор для C#, то можно приписать sealed?
|
|||
|
||||
| Damarus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: 6 Всего: 29 |
||||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Damarus, ну это был риторический вопрос автору идеи
|
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 3 Всего: 10 |
Вопрос на засыпку: Назовите внятную и вескую причину, Зачем нужно запрешать наследование? Тем самым нарушая основной принцип ООП.
-------------------- Пролетал мимо. |
|||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Fin, какой принцип? Где написано, что все классы должны иметь способность к классическому наследованию?
Это сообщение отредактировал(а) Xenon - 17.6.2007, 16:15 |
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 3 Всего: 10 |
Xenon, Открой любой учебник, где хотя бы краем упоминается Объектно Оринтированное Программирование. Там обязательно будут упоменены три кита ООП: инкапсуляция, наследование и полиморфизм.
-------------------- Пролетал мимо. |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
Fin, давай без фанатизма, а? то, что аксиоматическим началом эвклидовой геометрии является непересекаемость параллельных прямых вовсе не означает, что все прямые должны быть параллельны
|
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 3 Всего: 10 |
Ну я так и не услышал причину? Или запретить ради запрешения
-------------------- Пролетал мимо. |
|||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Fin, открыл, ну и? Да, согласен, в ООП есть и инкапсуляция и полиморфизм и наследование ... Что, я теперь в каждом классе должен все функции помечать как virtual, приватные члены делать защищенными? А, ну тогда еще нельзя использовать friend, так как друзья - палки в колеса настоящему ООП.
Свою очередь могу посоветовать открыть Страуструпа на 23 главе "Разработка и проектирование" |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Fedor, лучше запретить деструктор - тогда будет класс как класс, но без возможности наследования.
Fin, поверь, причины бывают... как правило архитектурные. Добавлено через 1 минуту и 6 секунд эээ... хотя, туплю... класс как класс не буит... -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
Fin, не знаю, быть может, мой пример - ошибка проектирования...Кроме того, не знаю, возможен ли такой поворот событий в С++(пример пришел из опыта программирования на Delphi)
были у меня объекты. реально конструируемые. а потом возникла потребность скрыть конструктор и сделать фабричный метод, чтоб предотвратить создание логически одинаковых объектов. И вот занаследует человек мой класс(ещё вопрос - зачем) и в своем конструкторе сделает вызов... моего фабричного метода. И фабричный метод найдет подходящий объект и увеличит его счетчик ссылок, или не найдет и создаст новый объект, который канет в бездну... В любом случае, человек со своим наследником моего класса не получит то, чего ожидал - вызов конструктора предка для дополнительной инициализации. Можно, конечно, раскомментировать случаи использования как только можно. Но безопасней было бы запретить наследование. И, если ему(клиенту) надо будет - пусть делает композицию с моим объектом. В общем, как на меня, запрет наследования был бы "в кассу" если необходимо предотвратить работу с фабричными методами вместо обычных конструкторов P.S. Кидайте помидоры, мне даже интересно, где ошибся при проектировании |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Например при реализации партерна Singleton. Ну и в свою очередь, Вы бы не могли продемонстрировать бубен, с помощью которого Вы сможете унаследовать класс с приватным конструктором, не внося изменений в интерфейс класса -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Товарищи, чем вас не устраивает мой вариант?
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
MAKCim, в принципе неплохо, но по-моему не очень очевидная реализация
|
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
А виртуальное наследование то зачем, если предполагается, что от класса A унаследовать больше нельзя? -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Vyacheslav,
а если комментарии прочитать -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Vyacheslav, без виртуального наследования производные классы от A можно будет строить
|
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Вопрос снят
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
зато действенная и объекты класса A можно без напряга создавать -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
MAKCim, минус твоей реализации: оверхэд из-за виртуального наследования. Ну это так - для общей картины
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Компилирется gcc без ошибок |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
есть вариант лучше? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
MAKCim, я же специально сказал: Можно сделать как у тебя и поиметь удобство(+) и оверхэд(-). Можно сделать иначе и поиметь неудобство(-) и скорость(+). Смотря что критичней - зависит от ситуации. Лучших решений не бывает. Бывают рациональные. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| MAKCim |
|
||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
надо бы проверить насколько мой вариант уступает в скорости (если вообще уступает) если использовать static функцию + new
то однозначно мой вариант быстрее в случае статических объектов
и немного уступает в случае динамического создания
засчет дополнительного создания объекта класса B, но класс B - пустой и при достаточной оптимизации подобъект этого класса вообще можно не создавать -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||
|
|||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |