|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Нужно ли множественное наследование? |
|
Нужно ли множественное наследование?
|
Старожил Сообщения: 163 |
Профиль | Отправить 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
|
Профиль | Сайт | Отправить PM | Цитировать Crew
Метод Add видимо несет некую "добавляющую" логику. В случае одного класса она понятна, но когда в один класс добавляются сущности 2 разных классов, либо понятнее будет AddRoga и AddKopyta, либо с моделью чой-то не того (если из двух родителей добавляются одни и те же классы). Цитата:
|
|
------- Отправлено: 09:12, 23-02-2003 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 163
|
Профиль | Отправить PM | Цитировать Цитата:
Цитата:
[s]Исправлено: Crew, 22:20 23-02-2003[/s] |
||
------- Отправлено: 22:11, 23-02-2003 | #3 |
Модер Сообщения: 1716
|
Профиль | Сайт | Отправить PM | Цитировать Цитата:
Цитата:
|
||
------- Отправлено: 22:15, 23-02-2003 | #4 |
Старожил Сообщения: 163
|
Профиль | Отправить PM | Цитировать Что в ней странного? Но тем не менее...
У меня нет более интересной мысли применения множественного наследования. И я думаю мало у кого есть и получается, что возможность использования множественного наследования есть, но никому не нужна |
|
------- Отправлено: 22:23, 23-02-2003 | #5 |
Монголо-татар Сообщения: 117
|
Профиль | Сайт | Отправить PM | Цитировать я не врубился...
а с каких это пор можно наследовать от двух предков??? |
------- Отправлено: 09:11, 24-02-2003 | #6 |
Модер Сообщения: 1716
|
Профиль | Сайт | Отправить PM | Цитировать Цитата:
Ork Yason RTFM. |
|
------- Отправлено: 11:34, 24-02-2003 | #7 |
Старожил Сообщения: 163
|
Профиль | Отправить PM | Цитировать Да я просто привел пример, в котором можно было бы применить наследование. А насчет оптимальности кода я вообще молчу, потому что пытался два раза реализовать дерево и не получилось. Пользуюсь теми, что в VC зашиты (точнее в win32).
Я и хотел узнать, использует ли кто-нибудь множественное наследование или нет. А если использует, то как с проблемами борется. Вот товарищ ivank, когда спорил какой язык лучше несколько раз упомянул, что в С++ есть множественное наследование. А я так смотрю нигде его нет больше В паскале нет в Javа тоже. И никто не страдает, никому как-будто бы и не приходится обходить подводные камни, связанные с его отсутствием, всем и так хорошо. [s]Исправлено: Crew, 23:06 24-02-2003[/s] |
------- Отправлено: 22:56, 24-02-2003 | #8 |
Старожил Сообщения: 240
|
Профиль | Отправить PM | Цитировать Crew
Тема, хотя и немного устарела, но я внесу свою лепту. COM объекты и далее все используют множественное наследование. Иначе они просто не могли бы существовать. И вертикальным наследованием такую задачу решить затруднительно. Кстати, в Delphi тоже есть этот механизм, только там для этого используются интерфейсы. |
------- Отправлено: 05:38, 05-12-2003 | #9 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Сбивается наследование безопасности | 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 |
|