Konstruktor in Klasse
-
Ich frage mich schon die ganze Zeit, wie man einen Konstruktor in einer Klasse aufrufen kann.
Also folgendes Problem:class A { public: A(std::string& str) { std::cout << str << std::endl; }; }; class B { public: A Test; };Wie kann ich jetzt den Konstruktor mit dem String von Klasse A aufrufen?
-
Klassenbob schrieb:
Ich frage mich schon die ganze Zeit, wie man einen Konstruktor in einer Klasse aufrufen kann.
Also folgendes Problem:class A { public: A(std::string& str) { std::cout << str << std::endl; }; }; class B { public: A Test; };Wie kann ich jetzt den Konstruktor mit dem String von Klasse A aufrufen?
Hmm, meinst du das oder wie ? :
class A { public: A(std::string& str) { std::cout << str << std::endl; }; }; class B { public: A Test("Bla"); };
-
Ja, ich habe wohl noch vergessen, dass ich die Werte an den Konstruktor von A erst im Konstruktor von Klasse B habe. Also wie kann ich so gesagt in einer Funktion den Konstruktor aufrufen? Oder muss ich mir da eine init() Funktion basteln?
-
@Felixxx: Hast Du das getestet? Das geht nämlich nicht.
Du sollst dazu Initialisierungslisten benutzen:
class B { public: B() : Test("BlaBla") { } A Test; };Natürlich kannst Du auch Werte von B's Konstruktor an Test übergeben.
Simon
-
theta schrieb:
@Felixxx: Hast Du das getestet? Das geht nämlich nicht.
Du sollst dazu Initialisierungslisten benutzen:
class B { public: B() : Test("BlaBla") { } A Test; };Natürlich kannst Du auch Werte von B's Konstruktor an Test übergeben.
Simon
Stimmt, woran liegt das ?
-
Felixxx schrieb:
Stimmt, woran liegt das ?
Es geht einfach nicht? Die Initialisierungsliste übernimmt diese Aufgabe. Dafür ist sie gedacht.
-
Ich glaube, ihr habt das Programm beide nicht getestet. Eine Umwandlung von einem Stringliteral in eine Referenz auf std::string ist nämlich möglich. Wenn dann muss der Konstruktor eine const-Referenz annehmen oder den String per Value übergeben bekommen.
-
Danke, mit der Initialiserungsliste geht das also. Bisher habe ich die nie benutzt. Und das mit dem string war nur ein Beispiel.
Aber dabei frage ich mich auch, ob es einen Unterschied macht, ob ich eine Variable in der Initialisierungsliste initialisiere, oder der Variable einen Wert in den geschweiften Klammern zuweise?
-
Ja. Such mal in der FAQ, ich glaube, da gibt's was.
-
Habs gefunden, danke
