Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484

Как можно получить динамический тип объекта?

04.09.2020, 18:24. Показов 2615. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
struct A{};
struct B : public A{};
struct C : public A{};
 
void test(A * p){
 
}
как в функции test получить динамический тип p при условии что структур которые унаследованы от A может быть бесконечное количество?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.09.2020, 18:24
Ответы с готовыми решениями:

Можно ли объявить переменную не как тип, а как свойство какого-либо объекта
Сегодня впервые сел за c# (по работе нужно) решил состряпать простенький калькулятор, в событии radioButton1_CheckedChanged пишу код ...

Как можно изменить тип объекта на базовый и наоборот с помощью метода
как можно изменить тип объекта на базовый и наоборот с помощью метода ? dynamic_cast

Как в обработчике события получить из sender имя объекта, вызвавшего событие, а не тип?
Добрый день! Помогите, пожалуйста, решить такой вопрос: Есть 2 объекта класса: private Sphere sphA, sphB в классе создается событие...

25
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
04.09.2020, 22:48
Студворк — интернет-сервис помощи студентам
ReYalp, динамическое связывание это способ использования наследования (один из случаев). Наследование само по себе - шире. Это способ включения подобъекта в объект наследника, "цементированный" на уровне типа. Раз создав такую зависимость разорвать уже нельзя. Но иногда удобно именно это. Спросить зачем оно надо легко. Ответить ещё легче: - потому что. А дальше куча вариантов. Написать двоеточие - не весь класс переписывать. Изменять и улучшать тоже нужно в одном сэмпле кода. И т.п.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13239 / 6871 / 1827
Регистрация: 18.10.2014
Сообщений: 17,418
04.09.2020, 22:53
Del
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
04.09.2020, 23:02  [ТС]
IGPIGP, зачем динамическое связывание в случае когда клас не полиморфный? Когда в базовых класах нету виртуальных функций? Тот пример котоырй привел TheCalligrapher , как мне кажется, используется редко
0
 Аватар для zayats80888
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
04.09.2020, 23:44
Цитата Сообщение от ReYalp Посмотреть сообщение
зачем динамическое связывание в случае когда клас не полиморфный?
Что такое динамическое связывание?
Цитата Сообщение от ReYalp Посмотреть сообщение
Тот пример котоырй привел TheCalligrapher , как мне кажется, используется редко
А где в том примере динамическое связывание? Там вроде "статическое связывание". Если a не ссылается на подобъект базового класса A класса B(ну или как это правильно сказать), то получим UB, никаких рантайм проверок и "связывания" не будет.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
04.09.2020, 23:48
Цитата Сообщение от ReYalp Посмотреть сообщение
IGPIGP, зачем динамическое связывание в случае когда клас не полиморфный? Когда в базовых класах нету виртуальных функций?
ReYalp, я уже сказал. Вы используете частный случай для постановки вопроса о общем. Зачем нужны млекопитающие если нет бобров?
Перечитайте. Вам хорошо показали, что динамическое связывание можно реализовать на указателях без всякого наследования. Наследование с виртуальными методами один из возможных путей реализации такого связывания. В таком случае говорят о полиморфном поведении указателей и ссылок базового класса в зависимости от их инициализации (фактического типа целевых объектов).
Наследование, это шире. Есть много случаев когда оно вообще ни как не связано с динамическим связыванием и работает на благо людей (и пр. мыслящих существ) во вселенной.
ReYalp, то что вы задаёте вопросы, это хорошо. Но качество не в ущерб количеству. Почитайте о наследовании с тем чтобы не вырывать из текста фрагмент типа "динамическое связывание" и пытаться генерировать вопрос. Такой способ обучения - видимость обучения. Читайте, разбирайте примеры - экспериментируйте. Тогда и вопросы будут более конкретны и без логических ошибок.
1
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
05.09.2020, 14:32
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
статический тип *p - void
Только вот в C++ не разрешается *p, когда тип p — void*.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.09.2020, 14:32

Как можно получить из объекта Process производительность процесса для ЦП
Как можно получить из объекта Process производительность процесса для ЦП? Или: как имея PID получить производительность процесса? Если...

Можно ли получить копию объекта по ссылке?
Добрый день. Столкнулся со следующей проблемой: В интерфейсе функции есть такое объявление метода class Logger : public ILogger ...

Можно ли получить текущий класс объекта в статическом методе родительского класса?
Здравствуйте, можно ли получить текущий класс объекта в статическом методе родительского класса?

Можно ли стандартными средствами VBA получить из объекта range его часть
Коллеги, Можно ли стандартными средствами VBA получить из объекта range его часть? Например объект range - это матрица размером 10x10,...

Как определить тип объекта?
Как определить тип объекта arr3? alert(arr3.type)-не работает <html> <script> var n1=parseInt(prompt('Введите количество...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru