Überladen von Funktion bei Vererbung
-
Hey,
ich habe folgendes Problem: Eine Klasse A hat zwei Fuktionen. Eine Funktion "fkt1" und eine Fuktion "Update". ftk1 benutzt dabei Update.
Jetzt wird Klasse A vererbt in Klasse B. hier wird "Update" überladen. Ich möchte jtzt beim Aufruf von fkt1 auch die Update aus klasse B verwenden, das Programm springt aber in Update aus Klasse A:class A{ public: void update(){ std::cout << "update aus klasse A" << std::endl; }; void fkt1(){ update(); }; }; class B : public class A{ public: void update(){ std::cout << "update aus klasse B" << std::endl; }; };Jetzt soll
A myA; B myB; A.fkt1(); B.fkt1();folgende Ausgabe haben:
update aus klasse A update aus klasse Bes kommt aber:
update aus klasse A update aus klasse AIdeen wären fett!
-
wie wäre es wenn du auch deine "fkt1()" in B überlädst? Eventuell solltest du dir mal Polymorphismus ansehen.
-
fkt1() ist zum einen recht lang, zum anderen verwenden auch noch andere Funktionen in clss A die Update-Funktion, ein Überladen von Update() wäre alse sehr praktisch.
Würde es denn per "virtual" funktionieren?
Als eine virual-fkt, die in A definiert wird und in class B dann neu definiert?
-
Firefighter schrieb:
wie wäre es wenn du auch deine "fkt1()" in B überlädst? Eventuell solltest du dir mal Polymorphismus ansehen.
Um ein paar Stichworte zu liefern, ergänze ich das ganze mal:
Das Schlüsselwort virtual dient dazu, das bei dem Aufruf die konkrete Implementierung des Objektes verwendet wird (Polymorphie).
Sobald du mit Basisklassen arbeitest, solltest du dir auch angewöhnen, den Destruktor der Basisklasse virtual zu deklarieren (Oder alternativ: private, dies ist aber schon sehr speziell).
class A{ public: // In Basisklassen bitte den Destruktor virtual deklarieren... virtual ~A() {} virtual void update() { std::cout << "update aus klasse A" << std::endl; } void fkt1() { update(); }; };Die Angabe "virtual" vererbt sich, das heißt, das du in der Abgeleiteten Klasse B das virtual nicht zwingend dazu schreiben musst. Es reicht wenn du deine Klasse A wie oben anpasst.
cu André
-
Hmm sorry für meine etwas aussageunkräftige Aussage
Werd das demnächst immer etwas ausführe.Danke asc