Non so se a qualcuno di voi è mai capitato, però a me è la seconda volta che succede di definire un metodo virtuale puro in una superclasse, convinto di poterlo implementare nella sottoclasse (simpatico e banale, anche se potente, design pattern "Abstract method").. e di vedere un bel messaggio di errore del linker che non trova l'implementazoine del metodo se si tenta di chiamarlo!
VOLETE IL CODICE? OK!
Allora di una cosa sono sicuro: con l'operatore di assegnamento ottengo il seguente risultato:
------------------------------------------------------------------------------------
#include
using namespace std;
// The abstract superclass:
class A {
public:
// The virtual pure methods:
virtual A& operator +=(A& a)=0;
virtual A& operator =(A& a)=0;
};
// My subclass
class B : public A {
public:
// The implementations:
virtual A& operator +=(A& a) {
cout << "Called the '+=' operator!" << endl;
return *this;
}
virtual A& operator =(A& a) {
cout << "Called the '=' operator!" << endl;
return *this;
}
};
// Using them:
int main(int argc, char *argv[]) {
// Instantiating:
B b1,b2;
b1 += b2; // This works:
b1 = b2; // This give a compile time error:
return 0;
}
------------------------------------------------------------------------------------
il che potrebbe essere QUASI accettabile.. se non fosse che non c'è modo di richiedere forzatamente l'implementazione nelle sottoclassi dell'operatore di assegnamento. Provate a sostituire i parametri dal tipo A& al tipo B&.. e vedete come s'incazza il compilatore!!!
Il codice che l'altra volta mi aveva dato lo stesso errore era su un metodo normalissimo.. fra l'altro con un altro compilatore (nemmeno da dire cambi compilatore perchè è un baco.. il baco è NEL MIO CERVELLO!).
Ok.. se trovate un modo per richiedere forzatamente (stile signature nell'interfaccia) l'implementazione dell'assegnamento nelle sottoclassi.. ditemelo perché la soluzione banale NON FUNZIONA :(