![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Форумчанин
Регистрация: 29.10.2009
Сообщений: 259
|
![]()
Хотел при решении одной задачи создать несколько абстрактных классов и один основной - потомок всех абстрактных, но при компиляции получаю ошибку: "Класс "ConsoleApplication1.MyClass" не может иметь несколько базовых классов: "ConsoleApplication1.MyAbstract 2" и "MyAbstract1"". Начал читать подробно что это за чертовщина и как её можно обойти и обнаружил примерно следующую методику:
Код:
Ладно, в данной задаче помогла вышеописанная методика, но возьмем несколько другую задачу: реализовать класс Car(автомобиль), который является наследником классов Engine(двигатель), Carburetor(карбюратор), Wheel(колесо). Тут не получиться, к примеру сделать класс Carburetor наследником Engine, а Wheel унаследовать от Carburetor(будет логически неверна данная структура наследования, как понимаете)=>засовывать все поля и методы родительских классов в класс Car также не особо правильно(получиться своеобразная "каша", если это все вообразить), так что здесь без множественного наследования никак не обойтись, но оно недоступно в синтаксисе языка!!! Конечно можно наверняка и тут придумать и нагородить своеобразную иерархию, но в такой иерархии "без бутылки не разберешься", хотя в принципе ничего чрезмерно сверхъестественного в данной задаче не было поставлено, даже наоборот первоначально все было разделено и размещено в соответствующие классы, выделены спец.методы и т.д. Возникали у кого-нибудь такие проблемы и если возникали, то каким образом их решали?
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
|
![]() |
![]() |
![]() |
#2 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
Код:
Цитата:
Тут, по сути говоря, идет обычное наследование(с расширением как обычно) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 20.10.2011 в 15:19. |
||
![]() |
![]() |
![]() |
#3 | |
Форумчанин
Регистрация: 29.10.2009
Сообщений: 259
|
![]() Цитата:
Согласен, что применение множественного наследования может приводить к некоторым ошибкам(у классов-родителей одинаковое наименование некоторых методов, например), но это уже работа программиста "грамотно именовать методы, поля" и избегать таких проблем. Позволю себе также привести ссылку на статью из WikiPedia, в которой говорится о том, что, например, в C++ имеется множественное наследование! По-моему, множественное наследование очень хорошая и важная штука и почему её нет в C# - это большой вопрос.
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
Последний раз редактировалось Mixim; 20.10.2011 в 15:34. |
|
![]() |
![]() |
![]() |
#4 | ||
Участник клуба
Регистрация: 04.04.2010
Сообщений: 1,554
|
![]()
Mixim
Цитата:
![]() Цитата:
|
||
![]() |
![]() |
![]() |
#5 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||
![]() |
![]() |
![]() |
#6 | |||
Участник клуба
Регистрация: 04.04.2010
Сообщений: 1,554
|
![]()
Пепел Феникса
Цитата:
Цитата:
Цитата:
|
|||
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 29.10.2009
Сообщений: 259
|
![]()
Вспомнил один пример из реальной жизни: есть такое животное, как Волкособ - гибрид волка и собаки=>при реализации класса Volkosob возможно потребуется наследование от классов Wolf и Dog. Наверняка это не единственный пример.
Наследование от двух классов - Это ты про Object и MyParentClass? Интерфейсы - хорошая штука, но в них нельзя написать код самого метода, только его наименование
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
|
![]() |
![]() |
![]() |
#8 | |
Участник клуба
Регистрация: 04.04.2010
Сообщений: 1,554
|
![]()
Mixim
Цитата:
![]() |
|
![]() |
![]() |
![]() |
#9 | ||||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
я это к тому что там при отсутствии интерфейсов, множественное наследование жизненно необходимо в итоге.(+мне не нравится как это потом работает, особенно если были виртуальные функции у классов) Цитата:
ибо если есть предок, то предок уже содержит object. Цитата:
Цитата:
помоему все-таки нет, тут помоему так и просится фасад, 40% собаки, 50% волка и 10% личного от смешения ![]() да и про пересечение свойств, методов итогового класса молчу. (хотя может и не очень удачно привел решение, ибо чтобы сказать эффективное решение, надо четко спроектировать класс+иерархию, я же просто образно сказал) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 20.10.2011 в 16:15. |
||||
![]() |
![]() |
![]() |
#10 | ||||
Software Developer
Старожил
Регистрация: 19.12.2008
Сообщений: 2,070
|
![]() Цитата:
Цитата:
__________NewClass ____________| ____________| ________ParentClass2 ____________| ____________| _______ParentClass1 ____________| ____________| _________Object А вот множественное должно выглядеть как-то так: _________NewClass ____________| __________/___\ _________/_____\ ParentClass1__ParentClass2 ________\______/ ___________| _________Object
Будь проще и люди к тебе потянутся
Последний раз редактировалось spamer; 23.10.2011 в 04:20. |
||||
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Множественное наследование С++ | добрый_фей | Помощь студентам | 1 | 13.06.2011 14:31 |
Множественное наследование | liza kalueva | Общие вопросы C/C++ | 2 | 10.03.2010 01:57 |
Конкурс на изощренность. Множественное наследование | Парсифаль | Общие вопросы C/C++ | 4 | 09.02.2010 21:21 |
Завихрения множественного наследования. (Динамическое множественное наследование) | Парсифаль | Общие вопросы C/C++ | 10 | 09.02.2010 15:45 |
Множественное наследование | Crucian | Общие вопросы Delphi | 1 | 29.12.2008 14:26 |