5 / 5 / 1
Регистрация: 13.03.2011
Сообщений: 30
|
|
1 | |
Наследование20.07.2011, 09:19. Показов 1931. Ответов 15
Метки нет Все метки)
(
Добрый день. Мне нужно реализовать такую структуру классов: есть класс 1, от него наследуются три класса: 2.1, 2.2, 2.3. От этих трех классов нужно множественно унаследовать класс 3. Не возникнет ли каких-нибудь проблем, например, с тем, что все классы 2 будут иметь какое-то одинаковое поле класса 1 и при слиянии их в класс 3 возникнет какой-нибудь конфликт, или в 3 будет три одинаковых метода и т.д.?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
20.07.2011, 09:19 | |
Ответы с готовыми решениями:
15
Заменить наследование классов на наследование интерфейсов
Наследование наследование |
![]() 1067 / 846 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
20.07.2011, 09:22 | 2 |
Alex992, обязательно возникнет. Гуглить "ромбовидное наследование". Для решения проблем - виртуальный базовый класс. Также нужно обратить внимание на "принцип доминирования"...
2
|
Заблокирован
|
||||||
20.07.2011, 18:44 | 3 | |||||
ну да надо :: всё разруливать, потому что будет три экземпляра класса 1. Или наследовать виртуально, наверно это и нужно, пишешь так
0
|
5 / 5 / 1
Регистрация: 13.03.2011
Сообщений: 30
|
|
20.07.2011, 21:57 [ТС] | 5 |
Спасибо, разобрался. Вот неплохая статья, если кому еще понадобится http://www.devdoc.ru/index.php... itance.htm
Добавлено через 1 час 11 минут Сделал все классы 2 наследованными от 1 по virtual public и возник еще один вопрос: конструктор класса 1 имеет параметр, у всех конструкторов классов 2 есть параметр, передающийся конструктору 1 + по одному своему параметру на каждый. По идее, конструктор класса 3 должен принимать три параметра для передачи в конструкторы 2 + один параметр для передачи в 1. Возникает ошибка Код
E2251 Cannot find default constructor to initialize base class '1'
0
|
![]() 3219 / 1746 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
20.07.2011, 22:55 | 7 | |||||
Вы невнимательно прочли статью, ссылку на которую привели. Конструктор виртуального базового класса вызывается только один раз в самом нижнем производном классе. Все остальные вызовы этого конструктора в других классах игнорируются. Отсюда следует, что этот конструктор обязан быть в каждом производном классе от виртуального базового. Но вообще специалисты советуют проектировать так, чтобы виртуальный базовый класс инициализировался конструктором по умолчанию.
Вот модифицированный пример из той статьи:
0
|
Заблокирован
|
||||||
21.07.2011, 11:25 | 8 | |||||
ну вот так как то. Если base невиртуально наследован, то в строках 44 и в самом конце 46-ой возникает неоднозначность
ну я как можно больше колизий пытался замутить
0
|
Заблокирован
|
|
21.07.2011, 11:52 | 10 |
вроде я все разрулил в своём примере, ну создайте эти проблемы, а я разрулю. Просто я больше не вижу никаких проблем
0
|
Заблокирован
|
|
21.07.2011, 12:11 | 11 |
вот вы пишите что можно решить проблемы при помощи "::", или, используя виртуальное наследование. (ключевые слова выделил жирным)В примере вы решили при помощи виртуального наследования. Я же изначально просил пример без него, но чтобы проблемы решались "::".
Извините, если придираюсь, - случайно ![]()
0
|
21.07.2011, 12:12 | 12 |
а зачем такие сущности создавать, которых трудно поискать?
кто-нибудь может пример привести существования такого наследования в жизни? обычно в качестве примера приводят "форма" -> "треугольник", "прямоугольник", "эллипс". а теперь придумайте что-нибудь, что бы было одновременно всеми тремя. хотя вот, напросилось: "человек"->"программист", "игрок", "неудачник" ->"вовочка". какие элементы теперь как распределить (данные, методы)? человек. данные: голова, два уха. умеет спать, жрать, *рать. программист. данные: тип ос, любимый язык. умеет создавать ошибки. игрок. данные: размер долга. умеет проигрывать. неудачник. данные: количество проблем. не умеет ничего. вовочка. данные: еще немного мелочи в кармане. умеет радоваться жизни. вроде сростается. но это если так. если бы программисту потребовалась своя голова, или вторая голова, было бы сложнее.
0
|
593 / 531 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
|
|
21.07.2011, 12:22 | 13 |
novi4ok,
класс юнит классы войн с мечем, лучник наследуются от юнита. класс стражник дворца - наследует свойства обоих. класс постройка класс дом классы дом с верандой, дом с террасой наследуют свойства дома класс прибережный дом наследует их обоих свойства. да куча примеров.
0
|
21.07.2011, 19:15 | 15 |
пример неполноценный:
на фига нам вообще класс юнит, если у него ничего нет, и он ни фига не умеет? что мы собираемся от него наследовать, кроме имени parent-класса? хватает ли рук у стражника дворца, чтобы держать и лук, и стрелы, и меч? и дом с террасой, и с верандой напрашиваются на aggregation скорее, чем на inheritance допускаю, но ты ни одного иллюстративного не привел Добавлено через 1 минуту примерно так я тоже считаю. сколько ни приходилось видеть таких конструкций, все выглядели искусственно, и не соответствовали тому, что они должны были отображать. потому создавали скорее доп. сложности, чем упрощали решение задачи.
0
|
![]() 5052 / 3113 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
|
|
21.07.2011, 19:40 | 16 |
Абстрактный базовый. Содержит, например, виртуальные функции "Атаковать", "Идти", "Прятаться" и т.д. За счёт него мы сможем выделить всех бойцов рамкой и заставить их атаковать или идти.
0
|
21.07.2011, 19:40 | |
Помогаю со студенческими работами здесь
16
Наследование наследование
Наследование Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |