Supponiamo che io sono un po 'di codice come questo:Il sovraccarico di un metodo in una sottoclasse in C++
class Base {
public:
virtual int Foo(int) = 0;
};
class Derived : public Base {
public:
int Foo(int);
virtual double Foo(double) = 0;
};
class Concrete : public Derived {
public:
double Foo(double);
};
Se ho un oggetto di tipo concreto, perché non posso chiamare Foo (int)?
Se cambio il nome di Foo (double) in modo che non stia sovraccaricando Foo, allora tutto va bene ed entrambi i metodi sono accessibili, ma questo non è quello che voglio.
Analogamente, se rimuovo la classe Concrete e implemento Foo (double) in Derived, entrambi sono accessibili, ma, di nuovo, non quello che voglio.
Non capisco il problema. Le versioni GCC 3.3.6 e 4.2.4 compilano entrambi questo codice senza reclami. –
A causa della conversione implicita di numeri interi in duplicati, provare ad aggiungere la traccia alle funzioni e fare 'Concrete c; int i = 1; c.Foo (i); ' –
Non si chiama override se si ridefinisce un metodo virtuale in una sottoclasse? – mucaho