Frage zur abstrakten Klasse
-
Morgen Gemeinde,
folgende Frage stellte sich mir gestern.
Von einer Abstrakten Klasse kann man ja keine Instanz erzeugen.
Aber was passiert hier:class A { private: int private_a; public: A(int a):private_a(a) {} virtual void irgendwas() =0; };class B : public A { private: mein_b; public: B(int b):A(b),mein_b(b) {} //1. <=== unten Fragestellung void irgendwas() {} };class B : public A { private: mein_b; public: B(int b) //2. <=== unten Fragestellung { A a(b); //hier würde ein Fehler komm, ist klar. mein_b = b; } void irgendwas() {} };1. Warum funktioniert das? Es wird ja schließlich der Ctor von A aufgerufen, aber das sollte doch nicht möglich sein wenn es eine Abstrakte Klasse ist oder geschieht in der Initialisierungsliste etwas anderes als wenn ich es so wie bei 2. schreibe?
Das 2. nicht geht ist mir klar, wollte es nur zur verdeutlichung meiner Frage mit hinschreiben.
-
Da du von A ableitest, kannst du natürlich den "A-Teil" von B initialisieren. Du erzeugst ja kein A-Objekt, sondern ein B-Objekt, das dann den A-Teil verwaltet und somit auch initialisieren darf.
-
Könnte ich also sagen ich erzeuge kein Objekt von meinem "Gerüst" sonder ich fülle das "Gerüst" nur mit Werten ohne es vollständig zu erzeugen?
Ansonsten danke für die Antwort das hat mir geholfen
-
Firefighter schrieb:
Könnte ich also sagen ich erzeuge kein Objekt von meinem "Gerüst" sonder ich fülle das "Gerüst" nur mit Werten ohne es vollständig zu erzeugen?
Ansonsten danke für die Antwort das hat mir geholfen
Ja. In etwa so kannst du dir das vorstellen.
-
Ich bedanke mich

-
Abstract heißt eben nicht exakt, dass man garkeine Instanz davon erzeugen darf, sondern es bedeutet lediglich, dass es keine eigenständige Instanz davon geben darf. Als geerbter Bestandteil einer abgeeiteten Klasse kann (und muss ja auch) ein A-Objekt existieren.
-
pumuckl schrieb:
Abstract heißt eben nicht exakt, dass man garkeine Instanz davon erzeugen darf, sondern es bedeutet lediglich, dass es keine eigenständige Instanz davon geben darf.
Ok das habe ich noch nicht gewusst, danke das hat noch mehr aufgeklärt.