![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 14.12.2009
Сообщений: 716
|
![]()
Всем привет, столкнулся со следующей проблемой, как ее решить и как организовать правильное наследование?
Задача: Имеется 3 класса A, B, C, каждый класс содержит по методу и имеет следующую схему наследования, смотреть Figure 1.0. Как же быть? Если мне в классе B нужно использовать метод класса A а в классе C метод класса A и B, притом то что класс B уже унаследовал класс A. Здесь собственно и вытекает сообщение компилятора об ошибке -> "is already a base-class of". Figure 1.0 Код:
Последний раз редактировалось coNsept; 12.06.2012 в 11:08. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() |
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
у вас уже A внесен в иерархию, снова вносить не нужно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
Автора интересуют механизмы, с помощью которых возможно разрешать подобного рода конфликты. И это правильная позиция.
Допустим, в будущем автор захочет создать архитектурные комплексы, которые будут автоматически разворачиваться используя магию шаблонов. И тогда уже не получится думать "внести в иерархию", или "не внести". Ибо подобные метапрограммы выборки значительно усложнят код шаблонов. Гораздо практичнее использовать механизмы разрешения подобного рода конфликтов, и цеплять в иерархии любые классы, в любых порядках и последовательностях наследования. Последний раз редактировалось _Bers; 12.06.2012 в 16:35. |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 14.12.2009
Сообщений: 716
|
![]()
Правильно, когда существует множественное количество классов с применением множественного наследования от одного класса к другому и т.д. и т.п. возникает сложность в иерархии, ты начинаешь забывать и задавать себе вопрос а можно ли унаследовать классу X, класс Y и не будет ли класс Y являться базовым классом уже какого-нить другого класса в случае если этот "другой класс" будет унаследован классу X тоже.
Поэтому я ищу различные механизмы обхода данной проблемы, чтобы на будущее написать какой либо класс и добавить его в свой проект там где он необходим и не заботится он том что изза него может возникнуть проблема "is already a base-class of". Спасибо большое Вам Bers. Именно виртуальное наследование это то что мне нужно, только есть еще один момент который я не понял, методы должны объявляться виртуальными обязательно или нет? Последний раз редактировалось coNsept; 12.06.2012 в 17:23. |
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() Цитата:
Неет. Полиморфизм (виртуальные функции) не имеют никакого отношения к виртуальному наследованию. Там хоть и используется одинаковое ключевое слово virtual, но оно в разных контекстах трактуется по разному. |
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Множественное наследование в C# | Mixim | C# (си шарп) | 15 | 14.03.2012 19:43 |
[с++] Множественное наследование | huichos | Общие вопросы C/C++ | 3 | 16.12.2011 18:25 |
Множественное наследование | Jugger | Помощь студентам | 2 | 09.12.2011 20:23 |
Множественное наследование С++ | добрый_фей | Помощь студентам | 1 | 13.06.2011 14:31 |
Множественное наследование | Crucian | Общие вопросы Delphi | 1 | 29.12.2008 14:26 |