|
3 / 3 / 1
Регистрация: 25.12.2014
Сообщений: 63
|
|||||||||||
Инициализация при множественном наследовании25.12.2014, 23:23. Показов 2570. Ответов 13
Метки нет (Все метки)
Имеется иерархия типов. Во главе: базовый класс-интерфейс, далее один базовый класс, от него два производных, а от них множественно унаследован ещё один.
В каждом классе определены по крайней мере все конструкторы и деструктор. При создании объекта самого производного класса через конструктор с параметрами используются инициализаторы. Так вот, созданный объект получается с нормальными данными из производных классов, а вот в базовом классе срабатывает конструктор по умолчанию. Не могу найти причину. Помогите, пожалуйста. Всю голову сломал. classes.cpp Кликните здесь для просмотра всего текста
Прикрепляю работу создания объекта и файл Unit1.cpp Unit1.cpp Кликните здесь для просмотра всего текста
0
|
|||||||||||
| 25.12.2014, 23:23 | |
|
Ответы с готовыми решениями:
13
Конструктор при множественном наследовании Неоднозначность при множественном наследовании Конструкторы с параметрами при множественном наследовании |
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
||||||
| 26.12.2014, 12:10 | ||||||
|
Вы для начала в конструкторы дебажные сообщения добавьте, это поможет частично решить проблему
и вроде
1
|
||||||
|
3 / 3 / 1
Регистрация: 25.12.2014
Сообщений: 63
|
|||||||||||
| 28.12.2014, 23:22 [ТС] | |||||||||||
|
Что с virtual, что без, увы. Все равно создает объект из базового с помощью конструктора по умолчанию, а дальше с помощью параметрического.
Добавлено через 1 час 0 минут То есть происходит не вот это:
а вот это:
0
|
|||||||||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 28.12.2014, 23:57 | ||
|
Т.е. конструктор Base с нужными параметрами нужно вызывать из Recorders. Соответственно и конструкторы остальных классов нужно проектировать с учетом этого. PS. больно смотреть на повсеместное отсутсвие const у char *. А ведь компилятор скорее всего предупреждает.
1
|
||
|
3 / 3 / 1
Регистрация: 25.12.2014
Сообщений: 63
|
|||||||
| 29.12.2014, 00:39 [ТС] | |||||||
0
|
|||||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||||||||||||
| 29.12.2014, 00:51 | |||||||||||||
|
Это нужно потому, что виртуальность в наследовании гарантирует единственность объекта базового класса в иерархии, поэтому логичное место для его инициализации - это самый верхний уровень - most derived class.
1
|
|||||||||||||
|
3 / 3 / 1
Регистрация: 25.12.2014
Сообщений: 63
|
||||||
| 29.12.2014, 01:14 [ТС] | ||||||
|
DrOffset, наверно, я неправильно понял.
Я попробовал поставить его просто первым, но, очевидно, это не то, что надо было сделать:
0
|
||||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||||||||
| 29.12.2014, 01:40 | ||||||||
1
|
||||||||
|
3 / 3 / 1
Регистрация: 25.12.2014
Сообщений: 63
|
||||||
| 29.12.2014, 02:20 [ТС] | ||||||
|
DrOffset, все по-прежнему
![]() Кликните здесь для просмотра всего текста
Наверно, я снова что-то не понял.
0
|
||||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 29.12.2014, 13:00 | ||
|
И покажи как классом пользуешься.
1
|
||
|
3 / 3 / 1
Регистрация: 25.12.2014
Сообщений: 63
|
||||||
| 29.12.2014, 14:05 [ТС] | ||||||
|
DrOffset, Закомментировал все действия.
Кроме того на аттаче с начала темы есть скрин. Кликните здесь для просмотра всего текста
0
|
||||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|
| 29.12.2014, 17:44 | |
Сообщение было отмечено unit37 как решение
Решение
1
|
|
|
3 / 3 / 1
Регистрация: 25.12.2014
Сообщений: 63
|
|
| 29.12.2014, 22:27 [ТС] | |
|
DrOffset, спасибо огромное!!! С твоей помощью, разобрался.
И правда ведь, конструктор копирования пригодился... Теперь все работает
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|
| 29.12.2014, 23:32 | |
|
0
|
|
| 29.12.2014, 23:32 | |
|
Помогаю со студенческими работами здесь
14
Порядок вызова конструкторов при множественном наследовании Компилятор не видит класс при множественном наследовании Помогите найти ошибку при множественном наследовании Конфликт имен при множественном наследовании struct При множественном наследовании не работает getline(std::cin, ?) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
|
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-динозавры, а новое поколение лёгких потоков. Откат?. . .
|