|
3 / 3 / 1
Регистрация: 02.03.2013
Сообщений: 231
|
||||||||||||||||
Наследование19.08.2020, 15:16. Показов 2425. Ответов 33
Потихоньку изучаю С++. Разбираю реализацию ООП на этом языке.
Сделал простенькие класса для понимания концепции наследования. Кликните здесь для просмотра всего текста
Решил добавить к этому контейнеры. Создал ещё два класса. Кликните здесь для просмотра всего текста
И тут началось. Не работает метод get_person() класса University. Не понимаю почему. dynamic_cast не помогает. Правда, я мб неправильно его использую? Делаю так
0
|
||||||||||||||||
| 19.08.2020, 15:16 | |
|
Ответы с готовыми решениями:
33
Заменить наследование классов на наследование интерфейсов Наследование С++ Наследование |
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||||||||
| 19.08.2020, 16:02 | ||||||||
|
Полиморфные у вас только Person <- Professor. PS ___________ >
1
|
||||||||
|
3 / 3 / 1
Регистрация: 02.03.2013
Сообщений: 231
|
|||||||||||||
| 19.08.2020, 16:03 [ТС] | |||||||||||||
|
Но если сделать так, то всё работает.
Кликните здесь для просмотра всего текста
но не работает такой код: Кликните здесь для просмотра всего текста
0
|
|||||||||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||||||||
| 19.08.2020, 16:09 | ||||||||
Сообщение было отмечено schoolboy_ как решение
Решение
1
|
||||||||
|
3 / 3 / 1
Регистрация: 02.03.2013
Сообщений: 231
|
||||||||
| 19.08.2020, 16:18 [ТС] | ||||||||
|
Тут какая-то закавыка с возвращаемым значением. Причем если я возвращаю именно контейнер. Я вот так могу делать. У меня всё работает. Но как только я начинаю возвращать контейнер - всё плохо.
DrOffset , вы не могли бы раскрыть это? Или сказать где про это прочитать. Потому что std::vector не полиморфный тип. Полиморфные у вас только Person <- Professor.
0
|
||||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 19.08.2020, 16:23 | ||
|
Person и Professor - напротив, связаны наследованием.
1
|
||
|
3 / 3 / 1
Регистрация: 02.03.2013
Сообщений: 231
|
|
| 19.08.2020, 16:32 [ТС] | |
|
DrOffset, спасибо вам. А вы не знаете, почему именно такая реализация ООП в С++. Кажется, что это очень криво. В каком нибудь С# этот код будет работать.
0
|
|
|
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,814
|
|
| 19.08.2020, 16:40 | |
|
0
|
|
|
3 / 3 / 1
Регистрация: 02.03.2013
Сообщений: 231
|
|||||||
| 19.08.2020, 16:48 [ТС] | |||||||
|
Я даже могу принимать контейнер, содержащий ссылки на родительский класс:
0
|
|||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||
| 19.08.2020, 16:53 | |||
|
2
|
|||
|
3 / 3 / 1
Регистрация: 02.03.2013
Сообщений: 231
|
||
| 19.08.2020, 16:56 [ТС] | ||
|
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||||
| 19.08.2020, 17:04 | |||||
|
Если где-то в C# вы встретили такое поведение, то там это точно так же реализовано средствами фреймворка. Сами по себе языки тут не при чем и в этом отношении солидарны. В C# точно так же будет ошибка типизации наподобие такой:
Добавлено через 4 минуты Вы в функции ждете std::vector<Person*> & и передаете std::vector<Person*>. А в примере с возвратом вы заявили тип std::vector<Person*>, но возвращаете по факту std::vector<Professor*> - это же совсем разные вещи.
1
|
|||||
|
3 / 3 / 1
Регистрация: 02.03.2013
Сообщений: 231
|
|
| 19.08.2020, 17:07 [ТС] | |
|
DrOffset, да. я был не прав. спасибо что помогли разобраться.
0
|
|
|
3 / 3 / 1
Регистрация: 02.03.2013
Сообщений: 231
|
|
| 20.08.2020, 14:04 [ТС] | |
|
Я правильно понимаю, что "умные указатели" не тождественны "сырым указателям"? Полиморфизм подтипа в С++ возможен только через "сырой указатель" или ссылку?
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||
| 20.08.2020, 14:47 | |||
|
1
|
|||
|
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,814
|
||
| 20.08.2020, 14:51 | ||
|
Добавлено через 30 секунд Вот, я недавно писал из книги по паттернам. Там полиморфизм как раз используется с умными указателями.
2
|
||
|
3 / 3 / 1
Регистрация: 02.03.2013
Сообщений: 231
|
|
| 20.08.2020, 15:17 [ТС] | |
|
Nishen, какой шаблон там реализовывается? Похоже на компоновщик.
0
|
|
|
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,814
|
|
| 20.08.2020, 16:07 | |
|
0
|
|
|
3 / 3 / 1
Регистрация: 02.03.2013
Сообщений: 231
|
||
| 22.08.2020, 19:06 [ТС] | ||
|
Мб для эффективности лучше создать результирующий вектор размером _professots.size() и туда скопировать по индексу?
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|
| 22.08.2020, 22:44 | |
|
schoolboy_, нет. Память здесь выделяется один раз.
1
|
|
| 22.08.2020, 22:44 | |
|
Помогаю со студенческими работами здесь
20
наследование Наследование наследование Наследование Наследование Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|