Ковариантный тип возвращаемого значения и преобразование типа
s->duplicate()
возвращает объект типаBox*
, но я получаю сообщение об ошибке при инициализации сBox*
, Похоже, он превращается обратно вShape*
, Какой смысл иметь ковариантные возвращаемые типы, если он конвертируется обратно в указатель базового класса ?:
struct Shape
{
virtual Shape* duplicate()
{
return new Shape;
}
};
struct Box : Shape
{
virtual Box* duplicate()
{
return new Box;
}
};
int main()
{
Shape* s = new Box;
Box* b = s->duplicate();
}
Ошибка:
main.cpp:22:12: error: cannot initialize a variable of type 'Box *' with an rvalue of type 'Shape *'
Box* b = s->duplicate();
^ ~~~~~~~~~~~~~~
1 error generated.