|
-1 / 4 / 0
Регистрация: 24.03.2012
Сообщений: 76
|
|||||||||||
Что происходит при наследовании классов?04.03.2017, 16:44. Показов 1627. Ответов 10
Гуглил тут одну тему про наследование и коде встретилась строчка: D d;
Что в ней конкретно происходит ? или как это называется ? Полный код :
A / \ B C \ / D Экземпляр D будет состоять из B, который включает в себя, и С, который также включает в себя A. Таким образом, у вас есть два "экземпляра" (из-за отсутствия лучшего выражения) А. Когда у вас есть такой сценарий, у вас есть возможность неоднозначности. Что происходит, когда вы делаете это:
0
|
|||||||||||
| 04.03.2017, 16:44 | |
|
Ответы с готовыми решениями:
10
Указатели при наследовании классов
|
|
|
||||||
| 04.03.2017, 16:56 | ||||||
|
Происходит неоднозначность. Не понятно от из базовых классов идёт эта функция. Проблема решается виртуальным наследованием
http://www.c-cpp.ru/books/virtualnyy-bazovyy-klass
1
|
||||||
|
-1 / 4 / 0
Регистрация: 24.03.2012
Сообщений: 76
|
|
| 04.03.2017, 17:05 [ТС] | |
|
0
|
|
|
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
|
|
| 04.03.2017, 17:06 | |
|
magistr4815, вызов наследуемого метода
0
|
|
|
-1 / 4 / 0
Регистрация: 24.03.2012
Сообщений: 76
|
||
| 04.03.2017, 17:12 [ТС] | ||
|
0
|
||
|
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
|
|
| 04.03.2017, 17:18 | |
|
magistr4815, посмотрите внимательно, и на свой код и на код Peoples, вы в классы B и C наследуете от класса А, в них будет метод из класса A, и потом во время множественного наследования образуется так называемая ромбовидная структура, и что получается, что у нас в классе D будет 2 метода Foo и происходит неоднозначность, проблема эта решается с помощью виртуального наследования в том случае если метод Foo не был переопределен в классах B и С, ну а дальше создаем объект класса D d(d маленькое это объект) и вызываем наш метож
0
|
|
|
-1 / 4 / 0
Регистрация: 24.03.2012
Сообщений: 76
|
||||||||
| 04.03.2017, 17:37 [ТС] | ||||||||
|
Добавлено через 7 минут Но почему ? Ну тоесть почему у нас после AB идет снова А? тогда по этой логике и после С должна идти А но она не следует. Помогите в этом разобраться ?
0
|
||||||||
|
|
||
| 04.03.2017, 17:52 | ||
|
Внутри конструктора B автоматически вызывается конструктор предка то есть A. Получается AB. При вызове конструктора C автоматически вызывается конструктор предка то есть A. Получается АС. Вызывается собственно D(а в нём автоматически конструкторы предков, то есть A и B, про них было выше). Деструкторы в обратном порядке
Добавлено через 10 минут
0
|
||
|
-1 / 4 / 0
Регистрация: 24.03.2012
Сообщений: 76
|
||
| 04.03.2017, 18:00 [ТС] | ||
|
Получается главный класс не вызывается, он вызывается в наследуемых классах. Что то вроде 1 вызов будет у наследуемого class B : public A где мы получаем "АВ" 2 вызов class C : public A где мы к прошлым буквам добавляем "АС" итог "АВАС" 3 вызов далее происходит магия "неопределенность" (но мы её вроде не разрешаем же) и получаем ещё плюс "D" Верно ?
0
|
||
|
|
|
| 04.03.2017, 18:05 | |
Сообщение было отмечено magistr4815 как решение
Решение
Мы вызываем D. Прежде чем вызывается его конcтруктор, вызывается конструкторы его предков(B и C), а у B и С конструктор иx предка, то есть A
1
|
|
|
-1 / 4 / 0
Регистрация: 24.03.2012
Сообщений: 76
|
|
| 04.03.2017, 18:12 [ТС] | |
|
Спасибо вот теперь ясно все)
0
|
|
| 04.03.2017, 18:12 | |
|
Помогаю со студенческими работами здесь
11
Ошибка Type missmatch при наследовании классов
Ошибка в наследовании классов о связи классов и наследовании даты Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|