Den Konstruktor einer Klasse im Konstruktor einer anderen Klasse aufrufen?
-
Hallo,
Sorry erstmal für den Titel falls ein Moderator einen besseren hat bitte ändern
also ich habe folgendes.class cSEdit { private: ... class CDatabase db; class CRecordset record; ... }Nun will ich im Konstruktor von cSEdit den Konstruktor von record aufrufen um ihm db zu übergeben aber wie mach ich das?
Also in der MSDN steht noch folgendes:Note A derived class must supply its own constructor. In the constructor of your derived class, call the constructor CRecordset::CRecordset, passing the appropriate parameters along to it.
Leider kann ich damit nicht viel anfangen.
mit record.CRecordset(db); bekomm ich nen Fehler.
Sorry für die dumme Frage bin noch nicht so firm in Klassen
MfG schirrmie
-
Das funktioniert über eine sogenannte Initialisierungsliste nach dem Konstruktornamen:
class cSEdit { private: CDatabase db; CRecordset record; public: cSEdit() : db(10,201), record(db) { //tue andere Sachen } };P.S.: Das "class" vor deinen Typen kannst du weglassen.
/edit: Ich hab deine Frage nochmal genau gelesen und meinen Quellcode leicht modifiziert. Ich bin mir jetzt nicht sicher, ob die Initialisierungsreihenfolge definiert ist. Also ob gewährleistet ist, dass db(...) vor record(...) aufgerufen wird. Sollte das nicht der Fall sein, so bleibt dir wohl nur die Möglichkeit aus db und record Zeiger zu machen und diese dann erst im Konstruktor selber zu initialisieren.
Dein zitierter Text bezieht sich übrigens nur auf den Fall, falls du von einem CRecordset ableiten willst. "derived" heißt in dem Fall abgeleitet.
class DerivedClass : CRecordset { public: DerivedClass() : CRecordset(...) { } }
-
Hallo,
erstmal das hier
class cSEdit { private: ... CDatabase db; CRecordset record; public: cSEdit(const CDatabase& d) : db(d), record(d) // Such mal nach Initialisierungsliste { // was du sonst noch machen willst } ... }Das Zitat aus der MSN passt hier irgendwie nicht. Du hast doch cSEdit von nichts abgeleitet.
[edit] oder so wie oben[edit]