Estoy pasando por una prueba de C++. Y encontré el siguiente código: es ilegal, pero no puedo entender por qué. ¿Puede alguien explicar por qué esta línea:Herencia: ¿por qué es esto ilegal?
Box* b1 = s1->duplicate();
genera el error del compilador, "no se puede convertir de la forma * a Box"? Supuse que s1->duplicate()
llama a Box::duplicate()
porque s1
realmente apunta a un Box
- pero del error del compilador parece que está llamando al Shape::duplicate()
.
#include <iostream>
struct Shape
{
virtual Shape* duplicate()
{
return new Shape;
}
virtual ~Shape() {}
};
struct Box : public Shape
{
virtual Box* duplicate()
{
return new Box;
}
};
int main(int argc, char** argv)
{
Shape* s1 = new Box;
Box* b1 = s1->duplicate();
delete s1;
delete b1;
return 0;
}
Debido a [l su] (http://stackoverflow.com/questions/4665117/c-virtual-function-return-type). –