О наследовании в ООП. Как узнать имя производного класса из базового?

Добрый день!

Есть базовый класс и n-ное количество производных. Базовый класс - абстрактный (но это не важно), при этом предоставляет не виртуальную функцию.
class Base()
{
    ...
    void f();
    ...
}

class Der1(): public Base
{ ... }
class Der2(): public Base
{ ... }


Взаимодействие с производными классами происходит через указатель на базовый класс:
Base* base = new Der1;
base->f();


При таком раскладе, есть ли какой-то способ отловить, какой базовый класс (желательно имя класса в строковом виде) вызвал функцию f()?
  • Вопрос задан
  • 3267 просмотров
Решения вопроса 1
Trrrrr
@Trrrrr
Если это С++, то хорошего варианта не существует.
Можно использовать dynamic_cast для приведения типа назад или typeid (msdn.microsoft.com/ru-ru/library/fyf39xec.aspx).
Как на меня лучший вариант - городить свои виртуальные функции, которые необходимо переопределять.

А что за задача, где такое понадобилось?
В подавляющем большинстве случаев, если такое необходимо, то это говорит о ущербности архитектуры программы, скорее всего задачу можно решить намного элегатнее не прибегая к таким глупостям.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
tsarevfs
@tsarevfs
C++ developer
Если нельзя просто добавить виртуальную функцию, можно попробовать получать информацию о типе с помощью typeid. Подозрительно, что такая задача возникла.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы