P
Ki schrieb:
Heißt im Klartext:
Objekte schon vor dem Loop leer definieren, deklarieren und die Attribute im Loop per Setter verändern?
Bisher war von einem Loop nie die Rede, es ging nur um den Scene-Konstruktor. Klartext ist also was völlig anderes.
Klartext: Wenn deine Scene-Objekte ein Panel-Objekt als Member haben, wird das Panel-Objekt auf jeden Fall im Konstruktor des Scene-Objektes initialisiert, und zwar vor Betreten des Scene-Konstruktor-Bodys. Das heißt:
Scene::Scene(/* params */)
//Hier wird AUF JEDEN FALL der Konstruktor von bg_ aufgerufen
{
}
Das passiert entweder implizit (d.h. der Default-Ctor von Panel wird aufgerufen) oder explizit (per Initialisierungsliste). Da Panel keinen Default-Ctor hat, gehts nur explizit, also so:
Scene::Scene(/* params */)
: bg_(someX(), someY(), someW(), someH())
{
}
Dabei gibts Beschränkungen für das, was du bg_ für die Initialisierung übergeben darfst:
- Die Werte dürfen von den Parametern des Scene-Konstruktors abhängen
- Die Werte dürfen von allen Scene-Membern abhängen, die vor bg_ in der Liste der Klassenmember stehen (weil die vor bg_ initialisiert wurden.
- Die Werte dürfen nicht von Membern abhängen, die weiter unten in der Memberliste stehen.
Für die initialisierung darfst du alle möglichen Funktionen benutzen, sofern die nicht welche von den "späteren" Membern benutzen oder das Scene-Objekt als ganzes.
Die Definition der Panel-Klasse, die du gezeigt hast, erlaubt übrigens noch was anderes:
Panel giveMeAPanel(/* params */);
Scene::Scene(/* params */)
: bg_(giveMeAPanel) //copy-Ctor von Panel aufgerufen
{
}