Как восстановить указатель на не первый базовый класс из неизвестного производного класса? Имеется некоторые классы A, B, C, D, E.
A, B, C из них интерфейсы.
Иерархия наследования такова:
У классов D и E по два родителя
{A, C} -> D, {B, C} -> E.
Так вот. У меня есть функция, в которую передаётся указатель типа void*, но подразумевается что он указывает на объект одного из этих классов. Мне нужно корректно привести этот указатель void* к указателю на класс C. Обычный reinterpret_cast приводит к вылетам программы, когда вызываются методы не первого базового класса, т.е. Если я привёл void* который указывал на класс D, к указателю на C и вызвал один из методов C, то это приводило к вылету, но если приводить к указателю на класс A и вызывать его методы, то всё работает хорошо.

21 Авг 2019 в 06:59
172 +1
1
Ответы
1

В данном случае вам нужно использовать static_cast для приведения указателя на производный класс к указателю на базовый класс. Например, если у вас есть указатель void* ptr на объект класса D или E, и вам нужно привести его к указателю на класс C, можно сделать следующим образом:

void* ptr = // указатель на объект класса D или E
C* c_ptr = static_cast<C*>(static_cast<D*>(ptr)); // или static_cast<C*>(static_cast<E*>(ptr));

Таким образом, вы сначала приводите указатель void* к указателю на класс D или E, а затем уже к указателю на класс C. После этого вы сможете вызывать методы класса C без проблем.

Приведение указателя с помощью static_cast является более безопасным и предпочтительным способом, чем reinterpret_cast, особенно при работе с иерархиями наследования.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир