Consideremos el siguiente ejemplo:anular una función miembro con diferente tipo de retorno
#include <iostream>
using namespace std;
class base
{
public:
virtual int func()
{
cout << "vfunc in base class\n";
return 0;
}
};
class derived: public base
{
public:
double func()
{
cout << "vfunc in derived class\n";
return 0;
}
};
int main()
{
base *bptr = new derived;
bptr->func();
return 0;
}
El compilador da un error para el código de seguridad que no es de tipo conflictivo para la función overriden. ¿Por qué no es posible anular una función en la clase derivada con un tipo de devolución diferente?
Creo que, para anular una función, el método virtual de la clase base debe redefinirse en la clase derivada. Para redefinir un método, las firmas de los métodos tienen que ser iguales. Como el tipo de devolución no forma parte de la firma, creo que incluso si hay una diferencia en el tipo de devolución, el método aún se redefinirá. En ese caso para el código anterior, la función virtual func
se redefine en la clase derivada con un tipo de devolución diferente. Pero el compilador arroja un error. Es mi entendimiento correcto?
Por el bien de la clarificación, lo compilador le está dando que error? –
@SionSheevok, GCC hace al menos: http://codepad.org/z7rXpCeK – bdonlan
@SionSheevok: Estoy usando gcc 3.4.6 –