C++. Наследование. Как сделать статический метод возвращающий оба типа?

Есть класс-предок и его класс-потомок. Надо чтобы у них обоих были методы с одинаковым названием, принимающие строку и в зависимости от того с какого слова она начинается возвращали либо экземпляр предка, либо экземплер потомка. Подскажите синтаксис. Там вроде как-то возвращать указатель на предка надо?


Ответы (1 шт):

Автор решения: gbg

Экземпляр вернуть нельзя, можно вернуть только указатель.

class Parent
{
public:
    virtual ~Parent() {}
    static Parent* test(const std::string& in) 
    {
         return new Parent();
    };
};


class Child:public Parent
{
public:
    static Parent* test(const std::string& in)
    {
          return new Child(); //здесь неявно будет приведет тип указателя
    };
};

Замечание:

Виртуальный деструктор у родителя нужен практически всегда, когда речь идет о наследовани - иначе при удалении, не будет вызыаться деструктор наследника, что приведет как минимум к утечке ресурсов.

→ Ссылка