Я бы хотел использовать полиморфизм со ссылками, без оператора new
. Существует один BaseClass
, который имеет некоторый (в данном случае один) виртуальный метод. И подклассы реализуют его.Используйте полиморфизм со ссылками. Недопустимая инициализация ссылки не const
Я создал фабричную функцию, которая создает соответствующий экземпляр. Но я получаю эту ошибку:
invalid initialization of non-const reference of type 'BaseClass&' from an rvalue of type 'SubOne'
Код является:
#include <iostream>
class BaseClass {
public:
virtual void run() = 0;
};
class SubOne : public BaseClass {
public:
virtual void run() override {
std::cout << "I am SubOne!" << std::endl;
}
};
class SubTwo : public BaseClass {
public:
virtual void run() override {
std::cout << "I am SubTwo!" << std::endl;
}
};
BaseClass& baseFactory(int num) {
switch(num) {
case 1:
return SubOne();
case 2:
default:
return SubTwo();
}
}
void executer(BaseClass& base) {
// code...
base.run();
// code...
}
int main() {
BaseClass& base = baseFactory(1);
// code...
executer(base);
return 0;
}
Это наименьшее из ваших забот. Возврат ссылки на локальный объект приводит к неопределенному поведению, если используется ссылка. – juanchopanza
У вас не может быть объекта без динамического распределения памяти. Ссылки не являются волшебными. 'std :: shared_ptr' есть, используйте их. –