Überladen einer Funktion in einer abgeleiteten Klasse
-
Hi,
folgender Fall:
class myClass { public: virtual void myFunction() { cout << "myFunction()" << endl; }; }; class myClass2 : public myClass { public: virtual void myFunction(bool tag=true) { cout << "myFunction() - overloaded version (tag=" << tag << ")" << endl; }; }; int main() { // Typ 1 myClass* a; a = new myClass2(); a->myFunction(); // Typ 2 myClass2* b; b = new myClass2(); b->myFunction(); }Die Ausgabe ist
myFunction()
myFunction() - overloaded version (tag=1)Gibt es eine Möglichkeit, dass ein Objekt, das wie bei Typ 1 deklariert wurde, die überladene Funktion aus myClass2 ausführt?
Gruß, K.B.
-
Überladung funktioniert nur innerhalb eines Scopes, was du da machst, nennt sich Überdeckung. (und virtuelle Funktionen klappen nur, wenn sie eine identische Parameterliste haben)
Ich bin mir nicht sicher, ob es funktioniert, aber eventuell reicht ein "using myClass::myFunction;" am Anfang der myClass2. Andernfalls mußt du die Originalfunktion in der abgeleiteten Klasse überschreiben:
class myClass2 : public myClass { public: virtual void myFunction() { myFunction(true); } virtual void myFunction(bool tag) { cout << "myFunction() - overloaded version (tag=" << tag << ")" << endl; }; };
-
Das sind zwei unterschiedliche Methoden. Die eine erwartet einen Parameter (mit Defaultwert) die andere keinen. Du überdeckst also nur deine Methode aus der Basisklasse.
Edit: CStoll war schneller, mist!

Btw sollte er aber garkeine Methode überdecken wenn er öffentlich Vererbt.grüße
-
Der Compiler macht bei fehlender Parameter einen Aufruf der Methode
mit den Standardparametern also eigentlich:b->myFunction(true);und da die Methoden nicht die gleiche Signatur haben, hast du sie nicht überladen.
Deshalb mußt du zusätzlich ne Methodevirtual void myFunction() { myFunction(true); };und ich glaub (bin mir nicht sicher) du mußt dann wegen Überschneidungen
den Default-Parameter rausnehmenvirtual void myFunction(bool tag){Gruß,
CSpille
-
Shit...
Viel zu langsam

-
CStoll schrieb:
Überladung ... Überdeckung...überschreiben...
Leicht OT: Gibt's da eigentlich eine einheitliche "Benamsung" im Deutschen ?
Im Englischen fine ich overloading, overriding, hiding recht einheitlich verwendet ... im Deutschen dagegen kommt mir das recht konfus vor.Gruß,
Simon2.
-
Überschreiben, Überladen und Verdecken?

-
David_pb schrieb:
Überschreiben, Überladen und Verdecken?

sagst Du .... aber ich habe auch schon "Überlagern", .... gelesen. ("overwriting" aber auch, was es kompliziert macht, weil "overriding"->"überschreiben"->"overwriting" oftmal anders gemeint ist)....
Gruß,
Simon2.
-
Da siehst mal, Überlagern hab ich, soweit ich mich entsinnen kann, noch nie gesehen!

grüße
-
Danke für eure Kommentare. Wieder ein Schrittchen weiter auf der C++ Leiter.
K.B.