Können sich Konstruktoren gegenseitig aufrufen?
-
Hallo Forum,
können sich Konstruktoren gegenseitig aufrufen? Wenn ich mit dem Debugger durchlaufe sieht es so aus als wenn 2 Objekte erstellt worden sind.
Wenn es nicht anders geht muß ich den Code in extra Funktionen auslagern...class A { public: A(int i) { m = i; } A(int i, int j) { A(i); // Wenn ich hier i durch 1 ersetze geht es. if(m==i) { // m ist hier wieder irgendeine Zahl // Also hat der geschachtelte ktor Aufruf 2 Objekte erstellt? } } int m; }; int main(int argc, char* argv[]) { A *oA; oA = new A(111, 2222); return 0;}
-
Ich bin noch Anfänger, aber ich glaube das Stichwort was du suchst, ist 'Vererbung'.
-
Konstruktoren ein und dasselben Objektes können sich nicht gegenseitig aufrufen.
In deinem Beispiel wird im Konstruktor nur ein temporäres Objekt vom Typ A angelegt.
Ein Lösungsansatz ist es eine private initialize Methode zu schreiben, die dann in den Konstruktoren aufgerufen werden kann.P.S.: Ich meine mal gelesen zu haben, dass im neuen C++ Standard sowas eingeführt werden soll.
Gruß
Don06
-
Die Frage wurde hier schon einmal gestellt. Ich stand vor dem selben Problem.
Zusammengefasst: Eine Möglichkeit war es, gemeinsame Initialisierungen in einer separaten (privaten) Methode (z.B. void init(...)) durchzuführen, welche von den Konstruktoren aufgerufen wird.
Grüße...
Heiko
-
Ok danke.

Dann lagere ich den Code aus.
-
das solltest du eher so schreiben:
class A { public: A(int i) :m(i){} A(int i, int j) :m(i) {} int m; };das verdeutlich zum einen, dass es sich um eine initialisierung handelt und zum anderen verhindert es bei -O0, das dein code m zweimal initialisiert. einmal mit 0 und dann mit i.
-
class A { public: A(int i) :m(i){} // was ist das denn für eine Syntax? A(int i, int j) :m(i) {} int m; };Was meint diese :m(i) im Konstruktor genau? Könnte mir jemand einen Link zu dieser Syntax liefern?
-
Initialisierungsliste
http://tutorial.schornboeck.net/initliste.htm
-
http://www.cpp-tutor.de/cpp/le10/le10_01.htm
Da is meiner Meinung ne nette Erklärung zu dem Doppelpunkt.
Grunsätzlich bedeutet der Doppelpunkt, dass die Attribute beim Erzeugen des Objektes sofort mit dem entsprechend parameterisierten Konstruktoren erzeugt werden.
Ansonsten würden sie zunächst mit dem Default-Konstruktor erzeugt und Ihnen dann später ein entsprechend korrekt konstruiertes Objekt zugewiesen.
-
Danke für die Links
