О наследовании в ООП. Как узнать имя производного класса из базового? Добрый день!
Есть базовый класс и n-ное количество производных. Базовый класс - абстрактный (но это не важно), при этом предоставляет не виртуальную функцию.class Base()
{
...
void f();
...
}
class Der1(): public Base
{ ... }
class Der2(): public Base
{ ... }
Взаимодействие с производными классами происходит через указатель на базовый класс:Base* base = new Der1;
base->f();
При таком раскладе, есть ли какой-то способ отловить, какой базовый класс (желательно имя класса в строковом виде) вызвал функцию f()?

21 Авг 2019 в 07:09
150 +1
0
Ответы
1

В C++ нет встроенного механизма для получения имени класса в виде строки. Однако, можно использовать ряд различных методов для реализации подобного функционала. Например, можно добавить в базовый класс виртуальный метод getName(), который каждый производный класс будет переопределять, возвращая свое имя в виде строки.

Пример:

#include <iostream>
#include <typeinfo> // для typeid
class Base
{
public:
virtual std::string getName() const = 0;
void f()
{
std::cout << "Calling f() from class " << getName() << std::endl;
}
};
class Der1 : public Base
{
public:
std::string getName() const override
{
return "Der1";
}
};
class Der2 : public Base
{
public:
std::string getName() const override
{
return "Der2";
}
};
int main()
{
Base* base = new Der1;
base->f();
delete base;
return 0;
}

Таким образом, выполнив программу, мы получим вывод "Calling f() from class Der1". В этом примере метод getName() возвращает имя производного класса в виде строки.

Также можно использовать дополнительные методы, такие как использование макросов, рефлексии или внешних инструментов для получения имени класса в виде строки, но они часто требуют дополнительного кода и/или наличия сторонних библиотек.

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