Почему s1-> duplicate () не возвращает Box * в примере кода 1 ?Я бы предположил, что производный дубликат вызывается и как таковой, что Box * возвращается, но кажется, что вместо него возвращается Shape *.
Пример кода 1:
#include <iostream>
struct Shape
{
virtual Shape* duplicate()
{
std::cout << "c" << std::endl;
return new Shape;
}
virtual void print()
{
std::cout << "SHAPE" << std::endl;
}
virtual ~Shape() {}
};
struct Box : public Shape
{
virtual Box* duplicate()
{
std::cout << "b" << std::endl;
return new Box;
}
virtual void print()
{
std::cout << "BOX" << std::endl;
}
};
int main(int argc, char** argv)
{
Shape* s1 = new Box;
Box* b1 = s1->duplicate(); //ISSUE HERE
b1->print();
delete s1;
delete b1;
return 0;
}
Ошибка: 34:27: ошибка: недопустимое преобразование из «Shape *» в «Box *» [-fpermissive]