Я пытаюсь создать универсальный класс, который может возвращать объект другого класса в зависимости от входных данных универсального класса.
Из основной функции, если я передаю '1' в качестве аргумента конструктору универсального класса, я хочу иметь возможность получить объект класса child1 с помощью getType ().Мой вопрос: есть ли способ динамически изменить тип возвращаемого значения getType () или любой другой способ выполнить это поведение?
Моя текущая реализация вызывает метод print () базового класса, даже если я создаюобъект дочерних классов в универсальном конструкторе, поскольку m_type является базовым типом.
class base {
public:
void print(){
cout << "base\n";
}
virtual ~base() {}
};
class child1 : public base {
public:
void print(){
cout << "child1\n";
}
};
class child2 : public base {
public:
void print(){
cout << "child2\n";
}
void hello(){
cout << "hello from child 2\n";
}
};
class generic{
public:
generic(int b){
if(b==1) {
m_type = new child1();
}
else if(b==2)
m_type = new child2();
}
// Somehow return the object of one of the child class based on input
// to constructor.
base *getType(){
return m_type;
}
base *m_type;
};
int main()
{
generic *g1 = new generic(1);
// call the method from child1 class instead of base class.
g1->getType()->print();
return 0;
}