Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Нужно ли множественное наследование?

Ответить
Настройки темы
Нужно ли множественное наследование?

Старожил


Сообщения: 163
Благодарности: 0

Профиль | Отправить PM | Цитировать


На нашем пути существуют следующие проблемы:
Проблема неоднозначности
Например: оба родителя используют метод add(int)
А родители у нас А и В
И предположим, что получившийся класс использует оба метода и ему они нужны для разных целей. После некоторго размышления оставляем оба метода например так
void С::add(int n)
{
* A::add(n);
}
И вводим второй метод
void С::add2(int n)
{
*В::add(n);
}
Ура, проблема решена
А если двусмысленность более сложна?
Сейчас это было необходимо из-за пересечения понятий наследования и параметрической перегрузки. Когда в С++ используется перегруженное имя, то сперва вызывается механизм наследования для поиска контекста, в котором определена функция. Затем типы параметров анализируются для снятия двусмысленности в пределах данного контекста. Предположим, что есть два класса А и В, для каждого из которых определен метод display. но у методов разные аргументы (int и double). Мы считаем, что так как эти два метода различаются по списку параметров, дочерний класс может наследовать от двух родителей и иметь доступ к обоим методам. Счазззз. Когда мы вызываем метод display с целочисленным аргументом, компилятор не может приянять решение, использовать ли функцию из класса A(которая соответствует типу аргумента) или же из класса В (которая встречается первой при заложенном в С++ алгоритме поиска; для ее вызова аргумент будет приведен от типа int к типу double). Копмилятор ругнется, но ругнется только в точке вызова метода, а не при описании класса.
Звучит может угрожающе, но на самом деле это лечится, но только переопределением родительских классов, где методы необходимо объявить виртуальными (не чисто виртуальными), и компилятору станет ясно, что мы сделали это специально
Проблема на уровне дочерних классов, а решение на уровне родительских. Кде тут ООП?
Мне кажется цена использования множественного наследования слишком высокая, но может по неопытности...

Кто реально пользовался множественным наследованием и получил приятные результаты (не ходил и не плевался после применения)?

Это сообщение я уже постил, но на него никто не ответил

-------
"Сколь бы сложной ни казалась проблема на первый взгляд, она, если правильно к ней подойти, окажется еще более сложной" - Пол Андерсон


Отправлено: 01:08, 23-02-2003

 

Модер


Сообщения: 1716
Благодарности: 17

Профиль | Сайт | Отправить PM | Цитировать


Crew
Метод Add видимо несет некую "добавляющую" логику.
В случае одного класса она понятна, но когда в один класс добавляются сущности 2 разных классов, либо понятнее будет AddRoga и AddKopyta, либо с моделью чой-то не того (если из двух родителей добавляются одни и те же классы).

Цитата:
Проблема на уровне дочерних классов, а решение на уровне родительских. Кде тут ООП?
А чем это противоречит ООП? Это недостаток проектирования родителей?

-------
Васкецов Сергей
http://registry.oszone.net


Отправлено: 09:12, 23-02-2003 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 163
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата:
Это недостаток проектирования родителей?
Недостаток в редактировании классов родителей, что не очень хорошо, особенно если родителей писал не сам или классы эти активно используются в других местах в первоначальном виде

Цитата:
но когда в один класс добавляются сущности 2 разных классов..
Предположем создаем класс дерева из класса списка и *класса узла . И у того и у другого есть метод Add, но выполняют разные функции, и что самое приятное, нужны оба


[s]Исправлено: Crew, 22:20 23-02-2003[/s]

-------
"Сколь бы сложной ни казалась проблема на первый взгляд, она, если правильно к ней подойти, окажется еще более сложной" - Пол Андерсон


Отправлено: 22:11, 23-02-2003 | #3


Модер


Сообщения: 1716
Благодарности: 17

Профиль | Сайт | Отправить PM | Цитировать


Цитата:
но выполняют разные функции, и что самое приятное, нужны оба
Ну и называй их по разному.


Цитата:
класс дерева из класса списка и  класса узла
Довольно странная модель.

-------
Васкецов Сергей
http://registry.oszone.net


Отправлено: 22:15, 23-02-2003 | #4


Старожил


Сообщения: 163
Благодарности: 0

Профиль | Отправить PM | Цитировать


Что в ней странного? Но тем не менее...
У меня нет более интересной мысли применения множественного наследования. И я думаю мало у кого есть и получается, что возможность использования множественного наследования есть, но никому не нужна

-------
"Сколь бы сложной ни казалась проблема на первый взгляд, она, если правильно к ней подойти, окажется еще более сложной" - Пол Андерсон


Отправлено: 22:23, 23-02-2003 | #5


Монголо-татар


Сообщения: 117
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


я не врубился...
а с каких это пор можно наследовать от двух предков???

-------
* * * * * * * * Мы - это наши желания. Зигмунд Фрейд


Отправлено: 09:11, 24-02-2003 | #6


Модер


Сообщения: 1716
Благодарности: 17

Профиль | Сайт | Отправить PM | Цитировать


Цитата:
Что в ней странного?
Я бы дерево наследовал от узла, а в нем сделал бы список как рядовой член класса. Сам подумай, добавление с списку - вешь тривиальная, к дереву - неясно куда добавлять без доп. данных.

Ork Yason
RTFM.

-------
Васкецов Сергей
http://registry.oszone.net


Отправлено: 11:34, 24-02-2003 | #7


Старожил


Сообщения: 163
Благодарности: 0

Профиль | Отправить PM | Цитировать


Да я просто привел пример, в котором можно было бы применить наследование. А насчет оптимальности кода я вообще молчу, потому что пытался два раза реализовать дерево и не получилось. Пользуюсь теми, что в VC зашиты (точнее в win32).

Я и хотел узнать, использует ли кто-нибудь множественное наследование или нет.

А если использует, то как с проблемами борется. Вот товарищ ivank, когда спорил какой язык лучше несколько раз упомянул, что в С++ есть множественное наследование. А я так смотрю нигде его нет больше В паскале нет в Javа тоже. И никто не страдает, никому как-будто бы и не приходится обходить подводные камни, связанные с его отсутствием, всем и так хорошо.

[s]Исправлено: Crew, 23:06 24-02-2003[/s]

-------
"Сколь бы сложной ни казалась проблема на первый взгляд, она, если правильно к ней подойти, окажется еще более сложной" - Пол Андерсон


Отправлено: 22:56, 24-02-2003 | #8


Аватара для shurikan

Старожил


Сообщения: 240
Благодарности: 1

Профиль | Отправить PM | Цитировать


Crew
Тема, хотя и немного устарела, но я внесу свою лепту. COM объекты и далее все используют множественное наследование. Иначе они просто не могли бы существовать. И вертикальным наследованием такую задачу решить затруднительно.
Кстати, в Delphi тоже есть этот механизм, только там для этого используются интерфейсы.

-------
UNIX, UNAS и др. Myself I'll like 'em


Отправлено: 05:38, 05-12-2003 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Нужно ли множественное наследование?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Сбивается наследование безопасности SanyaJoker Microsoft Windows NT/2000/2003 3 27-03-2009 16:06
2008 - Наследование групповой политики Windows 2008 системой Windows XP Gudvin Windows Server 2008/2008 R2 0 24-03-2008 16:00
Прочее - Множественное подключение zayaz Сетевые технологии 2 03-12-2007 11:10
Групповые политики- порядок применения и наследование shefford Microsoft Windows NT/2000/2003 6 31-05-2007 17:03
Наследование интерфейсов netmax Программирование и базы данных 2 02-09-2003 20:08




 
Переход