|
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 8
|
||||||
Наследование. Не могу понять элементарную вещь23.07.2019, 15:33. Показов 1213. Ответов 7
Метки нет (Все метки)
Допустим есть родительский класс и производный. Сейчас мы не затрагиваем полиморфизм.
Так или иначе присвоение указателю базового класса адреса объекта производного класса должно быть возможным. А не понимаю я следующее.: Почему для такого присвоения производный класс обязательно должен наследоваться как public или protected? Вот простой пример (без смысловой нагрузки, задача просто скомпилированть):
Ведь операция присваивания выполняется для указателя и затрагивает только адреса. Какие из скрытых методов (или перегруженных операторов) должны быть выполнены и не могу этого сделать из-за private наследования? По-моему никакие, ведь мы имеем дело с указателем, а не самим объектом. А в чем тогда причина?
0
|
||||||
| 23.07.2019, 15:33 | |
|
Ответы с готовыми решениями:
7
Объясните умственно отсталому как сделать элементарную вещь в списке Не могу понять виртуальное наследование Наследование класов. Не могу понять в чем ошибка |
|
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
|
|
| 23.07.2019, 15:52 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 8
|
|
| 23.07.2019, 16:03 [ТС] | |
|
Ну, да. Давно регистрировался, чтоб ссылки работали. Ничего не постил.
0
|
|
|
96 / 82 / 22
Регистрация: 19.10.2013
Сообщений: 485
|
||||||||||||||||
| 23.07.2019, 16:37 | ||||||||||||||||
|
Причина в том, что вы не можете вызывать приватные методы родительского класса. А конструктор - это тоже метод.
Кажется я вопрос по диагонали прочитал, теперь понял, но объяснить не могу ![]() Если Based будет унаследован приватно, то разумеется его производные не могут быть кастануты в Based, он же приватный =) это как пытаться достать сметану из банки с неизвестным содержимым, сметаны там может и не быть. А почему банка непрозрачная? А потому что так задумали производители. и если вы наследуете приватно класс, значит делаете это из каких-то конкретных соображений. Например, чтобы нельзя было случайно вызвать методы базового класса
0
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 8
|
||||||||||||||||
| 23.07.2019, 16:38 [ТС] | ||||||||||||||||
|
WxMaper, такие простые вещи я вроде как знаю, я немного не об этом, есть нюанс.
Этот код компилируется:
И почему присваивание указателю адреса делает код некомпилируемым? Ведь в случае с указателями ни конструкторы, ни перегруженные операторы присваивания для класса Based, не выполняются, т.к. мы имеем дело с адресами, а не самими объектами.
0
|
||||||||||||||||
|
96 / 82 / 22
Регистрация: 19.10.2013
Сообщений: 485
|
|
| 23.07.2019, 16:43 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 8
|
||||||||
| 23.07.2019, 17:03 [ТС] | ||||||||
|
Несмотря на то, что класс наследуется приватно, через строку инициализации производного класса мы лишь передаем параметр в базовый класс, а сам конструктор базового класса выполняется в своем (базовом классе), поэтому определение объекта.
Спасибо.
0
|
||||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 25.07.2019, 09:57 | ||
|
Все дело в том, какое отношение между классами задает то или иное наследование. * Приватное наследование обозначает отношение "реализован посредством". Например: автомобиль реализован посредством колес (естественно не только, но это пример, который должен быть понятен всем, даже непрограммистам). * Публичное наследование обозначает отношение "является разновидностью". Например: ГАЗ-13 «Чайка» является разновидностью автомобиля. Когда вы кастите указатель, вы применяете реализованное отношение к объектам. Т.е., если совсем буквально, то своим кастом к базовому вы говорите: газ-13 - это автомобиль. Но вы не можете сказать, "автомобиль - это колесо", потому, что это не так.
0
|
||
| 25.07.2019, 09:57 | |
|
Помогаю со студенческими работами здесь
8
Стек на основе массива структур - эт как понять читаю литературу и не могу понять! Не могу понять одну вещь в ряде Лорана
не могу догнать одну вещь Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|