Возможно ли возвращать потомков абстрактного класса из функции? Есть функция, которая в зависимости от входящего значения, создаёт объект определённого класса, который наследуется от абстрактного. Возможно ли как-то вернуть этот объект по ссылке на базовый класс, не создавая его через new и не по указатею?

21 Авг 2019 в 07:06
164 +1
0
Ответы
1

Да, возможно вернуть потомков абстрактного класса из функции, используя ссылку на базовый класс. Для этого можно создать объект нужного класса внутри функции и вернуть его по ссылке на базовый класс.

Пример:

#include <iostream>
class AbstractClass {
public:
virtual void someFunction() = 0;
};
class ConcreteClass : public AbstractClass {
public:
void someFunction() override {
std::cout << "ConcreteClass" << std::endl;
}
};
AbstractClass& createObject(int value) {
if (value == 1) {
static ConcreteClass object;
return object;
} else {
// можно вернуть какой-то другой объект-потомок абстрактного класса
// или бросить исключение в случае необходимости
throw std::invalid_argument("Invalid value");
}
}
int main() {
AbstractClass& obj = createObject(1);
obj.someFunction();
return 0;
}

В данном примере функция createObject создает объект класса ConcreteClass и возвращает его по ссылке на AbstractClass. Далее в функции main этот объект используется как объект базового класса, при этом вызывается метод someFunction класса ConcreteClass.

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

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