Ich habe eine Basisklasse mit einer Reihe von geerbten abgeleiteten Klassen. Etwas wie folgt aus:
Polymorphismus und Standardwerte: Kann koexistieren?
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;
}
};
ich geerbt nur zwei Klassen der Kürze halber.
Dies ist der Haupt:
A* aArray[] = {
new B,
new C,
};
int main() {
aArray[0]->f();
aArray[0]->f();
return 0;
}
Wenn ich das Programm ausführen, die Ausgabe, die ich zurück ist erhalten:
bar
bar
Genau wie, wie, wenn der Compiler die Standardargumente der überschriebenen Funktionen ignoriert.
Ist das normal oder gibt es etwas, das ich falsch mache oder das ich vermisse?
Die Standardargumente der Funktion Signaturen unterschiedlich sein machen kann. Stellen Sie Ihre Warnungen auf Maximum und kompilieren Sie sie erneut. –
@ThomasMatthews: Also die Lösung, die sein könnte? Es ist in Ordnung, das Standard-Argument in der Basisklasse virtuellen Funktionen und lassen sie in den vererbten überschrieben Funktionen zu entfernen? – Overflowh
@Overflowh: ein Experiment versuchen: die Standardzuordnungen in der Funktionssignatur und Retest entfernen. –