Bin gerade bei Polymorphie angekommen!
-
using namespace std; class a { public: void slave() { cout << "a" << endl; } void master() { slave(); } }; class b : public a { public: void slave() { cout << "b" << endl; } }; int main() { //Versuch a a A; A.master(); //Versuch b b B; B.master(); }Ausagabe:
a
aBei Versuch b ist doch bekannt dass es scih um Klasse b handelt. Warum ist das der Funktion master() egal?
-
Schau dir mal das Keyword virtual an.
-
witte schrieb:
Schau dir mal das Keyword virtual an.
Und warum ist das da nötig? Ich mach ja nicht:
a* b = new B; b->master();Hinter b B kann sich doch kein A verstecken weil es kein Zeiger ist! Also warum muss es virtual sein?
-
Noch als Zusatz.Es ist ja schön das du bei Polymorphie angekommen bist,aber versuch demnächst aussagekräftige Titel zu wählen.
-
Firefighter schrieb:
Noch als Zusatz.Es ist ja schön das du bei Polymorphie angekommen bist,aber versuch demnächst aussagekräftige Titel zu wählen.
Entschuldigung!

-
Musst dich ja nicht entschuldigen, nur ein Aussagekräftiger Titel erhöht die Chancen das jemand deinen Thread liest.
-
Starterkid schrieb:
Hinter b B kann sich doch kein A verstecken weil es kein Zeiger ist! Also warum muss es virtual sein?
master ruft slave auf. Und weil slave nicht virtuell deklariert ist wird das zur compilezeit bereits gebunden, und zwar an A::slave().
Schau dir die Kapitel zum Thema Polymorphie und virtual nochmal genauer an.
Starterkid schrieb:
Firefighter schrieb:
Noch als Zusatz.Es ist ja schön das du bei Polymorphie angekommen bist,aber versuch demnächst aussagekräftige Titel zu wählen.
Entschuldigung!

Wenn du dich registrierst kannst du deine Beiträge editieren - auch den Titel.
-
Jetzt habe ich es verstanden! Danke! Ich werde mir registrieren, falls ich nicht in kürze doch kapituliere!

Ciao!