Müssen virtuelle Funktionen in jeder abgeleiteten Klasse definiert sein?
-
Hallo,
ich habe folgendes Problem:
class c1{ public: virtual void dosth() {cout << "TEST1" << endl;} }; class c2{ public: virtual void dosth() {cout << "TEST2" << endl;} }; class c3{ public: virtual void dosth() {cout << "TEST2" << endl;} };
Wie man sieht macht die Funtion c2::dosth() genau dasselbe wie die Funktion c3::dosth() aber was anderes als die Funktion c1::dosth(). Ich muss sie in c3 jedoch nochmal definieren weil es sonst einen link error gibt.
Gibt es einen Möglichkeit, dass ich sie trotzdem nicht definieren muss, sondern das automatisch die Funktion c2::dosth() aufgerufen wird, wenn c3::dosth() nicht definiert wurde?? Wenn die klassen und der Algorithmus in der Funktion komplizierter sind, dann ist es ja ziemlich viel aufwand denselben Quell in jede Ableitung zu kopierenMfG MoeJoe
-
Scheiße, mir ist ein dummer fehler unterlaufen. man sollte die klassen natürlich schon voneinander ableiten. Dann klappts doch. Sorry.
Mfg MoeJoe
-
Hallo,
nein, virtuelle Funktionen müssen nicht neu definiert werden, können aber. Bei deinem Beispiel ist ja jede Klasse eigenständig. Du müsstest praktisch die Klassen c2 und c3 von c1 erben lassen.
-
virtual mußt du so verstehen: "Die Methode DARF überschrieben werden."
-
und pure virtual (virtual func() = 0) als "die methode MUSS EINMAL überschrieben werden"