|
5 / 5 / 1
Регистрация: 13.03.2011
Сообщений: 30
|
|
Наследование20.07.2011, 09:19. Показов 2198. Ответов 15
Метки нет (Все метки)
Добрый день. Мне нужно реализовать такую структуру классов: есть класс 1, от него наследуются три класса: 2.1, 2.2, 2.3. От этих трех классов нужно множественно унаследовать класс 3. Не возникнет ли каких-нибудь проблем, например, с тем, что все классы 2 будут иметь какое-то одинаковое поле класса 1 и при слиянии их в класс 3 возникнет какой-нибудь конфликт, или в 3 будет три одинаковых метода и т.д.?
0
|
|
| 20.07.2011, 09:19 | |
|
Ответы с готовыми решениями:
15
Заменить наследование классов на наследование интерфейсов
Наследование |
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
| 20.07.2011, 09:22 | |
|
Alex992, обязательно возникнет. Гуглить "ромбовидное наследование". Для решения проблем - виртуальный базовый класс. Также нужно обратить внимание на "принцип доминирования"...
2
|
|
|
Заблокирован
|
||||||
| 20.07.2011, 18:44 | ||||||
|
ну да надо :: всё разруливать, потому что будет три экземпляра класса 1. Или наследовать виртуально, наверно это и нужно, пишешь так
0
|
||||||
|
Заблокирован
|
||
| 20.07.2011, 20:23 | ||
|
если базовый класс абстрактный и не имеет полей - то он может повторяться (его не обязательно делать виртуальным). Про это хорошо Страуструп написал.
0
|
||
|
5 / 5 / 1
Регистрация: 13.03.2011
Сообщений: 30
|
||||||
| 20.07.2011, 21:57 [ТС] | ||||||
|
Спасибо, разобрался. Вот неплохая статья, если кому еще понадобится http://www.devdoc.ru/index.php... itance.htm
Добавлено через 1 час 11 минут Сделал все классы 2 наследованными от 1 по virtual public и возник еще один вопрос: конструктор класса 1 имеет параметр, у всех конструкторов классов 2 есть параметр, передающийся конструктору 1 + по одному своему параметру на каждый. По идее, конструктор класса 3 должен принимать три параметра для передачи в конструкторы 2 + один параметр для передачи в 1. Возникает ошибка
0
|
||||||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
| 20.07.2011, 22:55 | ||||||
|
Вы невнимательно прочли статью, ссылку на которую привели. Конструктор виртуального базового класса вызывается только один раз в самом нижнем производном классе. Все остальные вызовы этого конструктора в других классах игнорируются. Отсюда следует, что этот конструктор обязан быть в каждом производном классе от виртуального базового. Но вообще специалисты советуют проектировать так, чтобы виртуальный базовый класс инициализировался конструктором по умолчанию.
Вот модифицированный пример из той статьи:
0
|
||||||
|
Заблокирован
|
|||||||
| 21.07.2011, 11:25 | |||||||
ну я как можно больше колизий пытался замутить
0
|
|||||||
|
Заблокирован
|
||
| 21.07.2011, 11:49 | ||
|
LosAngeles, про проблемы пирамидального наследования я знаю
![]() хотел узнать как вы решите эти проблемы при помощи "::" еще раз цитирую:
0
|
||
|
Заблокирован
|
||
| 21.07.2011, 11:52 | ||
|
0
|
||
|
Заблокирован
|
|||
| 21.07.2011, 12:11 | |||
|
Извините, если придираюсь, - случайно
0
|
|||
| 21.07.2011, 12:12 | |
|
а зачем такие сущности создавать, которых трудно поискать?
кто-нибудь может пример привести существования такого наследования в жизни? обычно в качестве примера приводят "форма" -> "треугольник", "прямоугольник", "эллипс". а теперь придумайте что-нибудь, что бы было одновременно всеми тремя. хотя вот, напросилось: "человек"->"программист", "игрок", "неудачник" ->"вовочка". какие элементы теперь как распределить (данные, методы)? человек. данные: голова, два уха. умеет спать, жрать, *рать. программист. данные: тип ос, любимый язык. умеет создавать ошибки. игрок. данные: размер долга. умеет проигрывать. неудачник. данные: количество проблем. не умеет ничего. вовочка. данные: еще немного мелочи в кармане. умеет радоваться жизни. вроде сростается. но это если так. если бы программисту потребовалась своя голова, или вторая голова, было бы сложнее.
0
|
|
|
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
|
|
| 21.07.2011, 12:22 | |
|
novi4ok,
класс юнит классы войн с мечем, лучник наследуются от юнита. класс стражник дворца - наследует свойства обоих. класс постройка класс дом классы дом с верандой, дом с террасой наследуют свойства дома класс прибережный дом наследует их обоих свойства. да куча примеров.
0
|
|
|
Заблокирован
|
|
| 21.07.2011, 12:29 | |
|
novi4ok, опять же, у Страуструпа есть пример
Что за пример не помню, но из реальной жизни взят вроде бы(стояла зада, он там описывает как удачно ее решили множественным наследованием). Хотя, ИМХО редко такие примеры бывают
0
|
|
| 21.07.2011, 19:15 | |||||
|
на фига нам вообще класс юнит, если у него ничего нет, и он ни фига не умеет? что мы собираемся от него наследовать, кроме имени parent-класса? хватает ли рук у стражника дворца, чтобы держать и лук, и стрелы, и меч? Добавлено через 1 минуту
0
|
|||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||
| 21.07.2011, 19:40 | ||
|
0
|
||
| 21.07.2011, 19:40 | |
|
Помогаю со студенческими работами здесь
16
наследование Наследование наследование
Наследование Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Рецензия / Мнение/ Перевод
https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs
. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|