Ho una classe base con un numero di classi derivate ereditate. Qualcosa di simile a questo:
Polymorphism e valori predefiniti: può coesistere?
class A {
public:
virtual void f(string foo = "bar") {
cout << foo << endl;
}
};
class B: public A {
public:
void f(string foo = "howdy") {
cout << foo << endl;
}
};
class C: public A {
public:
void f(string foo = "something") {
cout << foo << endl;
}
};
Ho ereditato appena due classi per brevità.
Questo è il principale:
A* aArray[] = {
new B,
new C,
};
int main() {
aArray[0]->f();
aArray[0]->f();
return 0;
}
Quando eseguo il programma, l'output che torno a dire:
bar
bar
Proprio come come se il compilatore ignora gli argomenti di default delle funzioni ignorata.
È normale o c'è qualcosa che sto sbagliando o che mi manca?
Gli argomenti predefiniti possono rendere diverse le firme di funzione. Trasforma i tuoi avvisi fino al massimo e ricompila. –
@ThomasMatthews: Quindi la soluzione che potrebbe essere? È corretto rimuovere l'argomento predefinito nelle funzioni virtuali della classe base e lasciarle nelle funzioni sovrascritte ereditate? – Overflowh
@Overflowh: prova un esperimento: rimuovi i compiti predefiniti nella firma della funzione e ripeti il test. –