consideri il seguente esempio:override una funzione membro con diverso tipo di ritorno
#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;
}
Il compilatore dà un errore per il codice precedente che c'è tipo conflitto per la funzione overriding. Perché non è possibile sovrascrivere una funzione nella classe derivata con un tipo di ritorno diverso?
Credo, in modo da ridefinire una funzione, il metodo virtuale classe base deve essere ridefinito nella classe derivata. Per ridefinire un metodo, le firme dei metodi devono essere le stesse. Dato che il tipo di reso non fa parte della firma, credo che anche se ci fosse una differenza nel tipo di ritorno, il metodo sarà comunque ridefinito? In questo caso per il codice sopra, la funzione virtuale func
viene ridefinita nella classe derivata con un tipo di ritorno diverso. Ma il compilatore genera un errore. La mia comprensione è corretta?
Per l'amor di chiarezza, quale compilatore sta dando voi quale errore? –
@SionSheevok, GCC fa almeno: http://codepad.org/z7rXpCeK – bdonlan
@SionSheevok: Sto usando gcc 3.4.6 –