Реферирование этот вопрос: C++ virtual function return typeC++ Виртуальный метод возвращать различные производные типы
Рассмотрим следующий набор объектов.
class ReturnTypeBase
{
};
class ReturnTypeDerived1 : public ReturnTypeBase
{
public:
int x;
};
class ReturnTypeDerived2 : public ReturnTypeBase
{
public:
float y;
};
class Base
{
public:
virtual ReturnTypeBase* Get() = 0;
};
class Derived1: public Base
{
public:
virtual ReturnTypeDerived1* Get()
{
return new ReturnTypeDerived1();
}
};
class Derived2: public Base
{
public:
virtual ReturnTypeDerived2* Get()
{
return new ReturnTypeDerived2();
}
};
Могут ли эти объекты использоваться следующим образом?
Base* objects[2];
objects[0] = new Derived1();
objects[1] = new Derived2();
ReturnTypeDerived1* one = objects[0]->Get();
ReturnTypeDerived2* two = objects[1]->Get();
Я предполагаю, так как возвращаемые типы ковариантны (?), Что множество объектов выше правовой C++. Будет ли вызываться соответствующий метод Get()? Могут ли указатели one/two присваивать возвращаемое значение метода Get() без кастования?
Вы имели в виду 'ReturnTypeDerived1 * one = objects [0] -> Get();'? – wally
@flatmouse Да, почти получил изменение в.: D –
У вас есть случай использования? – curiousguy