C'tor problem in Base class
-
Also theoretisch müssten die folgenden code komplierbar sein
class B { public: B(); protected: int Bi; }; class D : public B { D(); }; D:: D() :Bi(0) //here fails { }Was ist falsch hier???
natürlich sollte man nicht in der abgleiteten Klasse das Basis variable initialisieren, sondern durch Aufruf des Basis-Ctors, etwa:
B::B() : Bi(0) { } D:: D() :B() { }
-
Hallo
warum stellst du eine Frage, deren Antwort du schon weißt?
bis bald
akari
-
Bi ist bereits durch B::B() initialisiert worden und kann kein zweites mal initialisiert werden.
-
eben nicht.
natürlich sollte man nicht in der abgleiteten Klasse das Basis variable initialisieren, sondern durch Aufruf des Basis-Ctors
man sollte so schreiben, aber nicht zwingend.
Meine Frage war, wieso bei dem ersten Fall kann ich nicht compilieren?
Die Syntax ist doch richtig, und bevor der C'tor der abgleiteten Klasse aufgerufen wird, wurde die Basis Klasse schon konstruktiert, d.h. die abgleitete Klasse hat den Zugriff auf die Member variablen, die in Basis klassen public od. protected definiert sind.Wieso kann ich die nicht einfach initialieren???
-
Hallo
beim Konstruktor von D ist Bi ja schon initialisiert. Mit dem Standardkonstruktor für int. Deshalb kannst im Konstruktor von D Bi nur noch einen Wert zuweisen, aber nicht neu initialisieren.
bis bald
akari
-
danke, es sollte so sein