Форум программистов, компьютерный форум CyberForum.ru

Как узнать тип производного класса в функции базового - C++

Восстановить пароль Регистрация
 
Divergence
 Аватар для Divergence
7 / 7 / 0
Регистрация: 19.06.2013
Сообщений: 174
19.06.2014, 00:23     Как узнать тип производного класса в функции базового #1
Всем привет!
Есть иерархия классов:
C++
1
2
3
class1 -> class2->class3
              class2->class4
               class2->class5
Где стрелочки - наследование. Я создаю class3, class4, class5, в каждом из них есть экземпляры классов class2 и class1.
В классе class2 есть функция, которая должна отработать в зависимости от того, в каком из производных классов она была создана. Как мне узнать, на основе какого класса был создан экземпляр класса class2?
Буду благодарен за любые подсказки!!!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2014, 00:23     Как узнать тип производного класса в функции базового
Посмотрите здесь:

C++ Использование перегруженного оператора ввода/вывода в поток базового класса для объекта производного класса
Вызов виртуального метода базового класса из указателя производного C++
Вызов методов производного класса из базового C++
Конструкторы базового и производного класса C++
C++ Тип элемента массива базового класса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
19.06.2014, 01:00     Как узнать тип производного класса в функции базового #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Divergence Посмотреть сообщение
В классе class2 есть функция, которая должна отработать в зависимости от того, в каком из производных классов она была создана
Делаете эту функцию виртуальной в классе class2 и переопределяете как хотите уже в class{3-5}
Цитата Сообщение от Divergence Посмотреть сообщение
Как мне узнать, на основе какого класса был создан экземпляр класса class2?
Вы что-то путаете, class2 здесь создан всегда на основе class1 и никого больше.
Возможно, вопрос должен звучать так: как мне узнать, объект какого типа реально адресует указатель типа class2* (или ссылка)? .
Если реализация поддерживает RTTI, то
C++
1
std::cout << typeid(*class2Ptr).name() << std::endl;
распечатает имя искомого класса в некоторой зависящей от реализации манере.
Еще вариант через dynamic_cast<>() приводить объект типа class2* (или ссылку) ко всем производным по очереди и то приведение, которое не вернет вам nullptr (или не бросит исключение std::bad_cast), будет приведением к реально адресуемому типу.
Divergence
 Аватар для Divergence
7 / 7 / 0
Регистрация: 19.06.2013
Сообщений: 174
20.06.2014, 03:11  [ТС]     Как узнать тип производного класса в функции базового #3
Спасибо!
Теперь я понял, зачем вообще могут понадобиться эти касты!)
Раньше думал, что они только для упоротых психов))))
Deiron
25 / 25 / 1
Регистрация: 25.05.2009
Сообщений: 98
20.06.2014, 10:32     Как узнать тип производного класса в функции базового #4
ну, на самом деле, многие говорят (и, как я убедился на себе - правильно): "если объявив массив базового класса, при обращении к элементам его, вам необходимо знать, что за наследник там находится - у вас плохой дизайн".
Поэтому, пользуйтесь виртуальными функциями и делайте их так, чтобы не нужно было спрашивать "а какого ты типа?"
Yandex
Объявления
20.06.2014, 10:32     Как узнать тип производного класса в функции базового
Ответ Создать тему
Опции темы

Текущее время: 00:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru