Wie kann ich ein Objekt ohne Standard-Konstruktor auf dem Stack innerhalb einer Klasse erzeugen?
-
Hallo!
Ich möchte ein Objekt auf dem Stack erzeugen, welches innerhlab der private- oder public- Region einer Klasse deklariert wird.
Oder anders ausgedrückt ich brauche folgendes für den Stack (ohne new-operator und ohne malloc, calloc, ...):
class X { public: X::X(int param); X::~X(); }; class Y { private: X* obj; public: Y::Y(); }; Y::Y() { obj = new X(100); }Hat da jemand eine Idee? - innerhalb von Funktionen und Methoden ist das ja kein Problem, da man einfach folgendes benutzen kann:
void main() { X obj(100); }Das funktioniert im header leider nicht. Syntaktisch korrekt kann ich dort folgendes machen:
class Y { private: X obj(int param); public: Y::Y(); };Allerdings weiß ich nicht, wie ich im Konstruktor (oder einer anderen Stelle) der Klasse Y die Parameter des Konstruktors der Klasse X an diesen übergeben kann.
Ich hoffe, ihr könnt mir helfen.
Vielen Dank schonmal,Eight_ball
-
Benutze die Initialisierer-Liste:
class X { public: X::X(int param); X::~X(); }; class Y { private: X obj; // kein Pointer public: Y::Y(); }; Y::Y() : x(10) // Default-Wert { } Y::Y(int param) : x(param) { }
-
Initialisierungsliste ist das Stichwort:
//irgendwo in der Klassen deklaration X x; //... Y::Y():x(100){ }
-
Das heißt aber, dass ich die Parameter des Konstruktors, zusätzlich über Methoden zugänglich machen muss, um einen anderen Wert, als den Standardwert zu übermitteln?
-
Eight_ball schrieb:
Das heißt aber, dass ich die Parameter des Konstruktors, zusätzlich über Methoden zugänglich machen muss, um einen anderen Wert, als den Standardwert zu übermitteln?
Ich verstehe die Frage nicht. Wie man Werte übergeben kann, hat Bulli schon beschrieben.
-
Ok, hab da was misinterpretiert, habs nun kapiert, vielen Dank!