Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/55: Рейтинг темы: голосов - 55, средняя оценка - 4.89
108 / 108 / 23
Регистрация: 21.03.2010
Сообщений: 445

Приведение к типу-наследнику

30.03.2014, 20:52. Показов 12223. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
class A {
};
class B: public A {
    void foo() const { std::cout << "some is king of every fish"; }
};
int main() {
    A* pointer(new B);
    static_cast<B*>(static_cast<void*>(pointer))->foo();
    return 0;
}
Можите на пальцах объяснить, как, без каких бы то ни было проверок, без дополнительных вычислений на этапе выполнения вызвать метод foo класса B для объекта, указатель на который хранится, как указатель на А? Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.03.2014, 20:52
Ответы с готовыми решениями:

ООП. Динамическое приведение типа от родителя к наследнику
Добрый день, коллеги. Проблема в следующем. Есть два библиотечных класса (xerces). 1) DOMElement class DOMElement : public DOMNode ...

Приведение к типу
В чем разница? static_cast&lt;int&gt;(a); и (int)a

Приведение к базовому типу
#include &lt;iostream&gt; using namespace std; class A{ public: virtual ~A() {} }; class B: public A{ };

22
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
30.03.2014, 22:41
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от CEBEP Посмотреть сообщение
там же речь о множественном наследовании и приведении типов к базовым. тут не имеет места ни такой вид наследования не такая ориентация приведения...
Товарищ zss написал, что я абсолютно не прав. Эта ссылка пруф того, что я прав, т.к. я говорил про общий случай. И про то, что у reinterpret_cast нет в данной ситуации никаких преимуществ перед static_cast, зато появляются минусы, если появляется такой тип наследования.
0
108 / 108 / 23
Регистрация: 21.03.2010
Сообщений: 445
30.03.2014, 22:44  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
какая необходимость делать каст через void*
Интересно. Был уверен, что на static_cast<B*>(pointer) компилятор ругается... сейчас убедился, что это не так... Так намного легче, спасибо
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
30.03.2014, 22:54
Цитата Сообщение от CEBEP Посмотреть сообщение
Так намного легче, спасибо
Именно. Я к этому вел с самого начала. Каст через void* к тому же обеспечит те же проблемы с множественным наследованием (пусть его нет в данном случае, но игнорировать этот факт нельзя), про которые я говорил. Каст через void* заблокирует способность static_cast вывести правильный адрес при преобразовании база->наследник, т.к. void* уже не несет информации о типе.

Добавлено через 4 минуты
CEBEP, есть целая техника, основанная на таком касте (база->наследник), может быть интересно на будущее.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.03.2014, 22:54

Приведение к типу (uint8 *)
Разбирая чужой код, наткнулся на такую вот конструкцию uint8 * buf1; uint8 * buf1a; int size = 1024; buf1...

Приведение переменной к другому типу
float a = (float)x; // старый стиль float b = static_cast&lt;float&gt;(y); // современный стиль разве по старому не удобнее? почему...

Приведение void* указателя к типу
struct tParamStruct { const char* Result; }; tParamStruct ParamStruct; void show(void *AdressPS) { // ????????

Приведение пользовательского типа к типу int
Написан класс DateTime и перегружены его операторы, в частности ввод/вывод в консоль и в файл. Код: #include &lt;iostream&gt; #include...

Приведение указателя на void к другому типу?
в поиске смотрел - не помогло! Возникла проблемка: В книге сказано, что указателю на void можно присваивать все типы указателей без...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru