<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Konstruktor von Objektelementen]]></title><description><![CDATA[<p>Hi,</p>
<p>zunächst einmal der code um den es geht (imho irrelevante dinge (wie diverse Elementfunktionen) hab ich mal der Übersichtlichkeit halber weggelassen):</p>
<pre><code>class InfoDialog : public MapDialog
{
public:
	InfoDialog(HWND hParent = NULL, WORD wTemplate = NULL);
};
class MainWindow : public RootWindow
{
public:
	MainWindow();
protected:
	InfoDialog InfoDlg;
};
</code></pre>
<p>MainWindow soll also eine Instanz von InfoDialog enthalten. InfoDialog::InfoDialog(...) soll aber Parameter bekommen.<br />
Folgendes ist leider nicht möglich (VC++ spuckt einen syntax fehler aus):</p>
<pre><code>class MainWindow : public RootWindow
{
public:
	MainWindow();
protected:
	InfoDialog InfoDlg(hWnd, IDD_INFO); // MainWindow erbt hWnd von RootWindow!!
};
</code></pre>
<p>Gelöst habe ich das problem vorerst folgendermaßen:</p>
<pre><code>MainWindow::MainWindow() : RootWindow(NULL)
{
	InfoDialog InfoDlgInit(hWnd, IDD_INFO);
	InfoDlg	= InfoDlgInit;
};
</code></pre>
<p>Diese Lösung finde ich schon äußert unbefriedigend: Das Objekt sollte sich doch eher selbst (mittels Konstruktor) initialisieren, statt eine andere Instanz diese Arbeit erledigen zu lassen und dieses dann zu kopieren.<br />
Richtig blöd wird das ganze aber, wenn ich im Konstruktor einen Zeiger auf das aktuelle Objekt (this) woanders speichern will (brauche das für Callback als Elementfunktion). Dann muss ich zusätzlich für den Konstruktor des Initialisierungsobjekts (InfoDlgInit) einen Zeiger auf das Objektelement (MainWindow::InfoDlg) übergeben.</p>
<p>Wohl gemerkt, es geht mir hier <strong>nicht</strong> um den WinAPI-Kram (dafür brauche ich die Objekte halt blos), sondern darum, wie ich MainWindow::InfoDlg vernünftig initialisieren kann. Sprich: Parameter an dessen Konstruktor übergeben.</p>
<p>Hoffe ihr könnt mir weiterhelfen, bin leider (noch) ziemlich unerfahren.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Vielen Dank im Voraus und Gruß,<br />
Nils.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/150478/konstruktor-von-objektelementen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 18:23:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/150478.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 16 Jun 2006 23:16:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Fri, 16 Jun 2006 23:16:50 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>zunächst einmal der code um den es geht (imho irrelevante dinge (wie diverse Elementfunktionen) hab ich mal der Übersichtlichkeit halber weggelassen):</p>
<pre><code>class InfoDialog : public MapDialog
{
public:
	InfoDialog(HWND hParent = NULL, WORD wTemplate = NULL);
};
class MainWindow : public RootWindow
{
public:
	MainWindow();
protected:
	InfoDialog InfoDlg;
};
</code></pre>
<p>MainWindow soll also eine Instanz von InfoDialog enthalten. InfoDialog::InfoDialog(...) soll aber Parameter bekommen.<br />
Folgendes ist leider nicht möglich (VC++ spuckt einen syntax fehler aus):</p>
<pre><code>class MainWindow : public RootWindow
{
public:
	MainWindow();
protected:
	InfoDialog InfoDlg(hWnd, IDD_INFO); // MainWindow erbt hWnd von RootWindow!!
};
</code></pre>
<p>Gelöst habe ich das problem vorerst folgendermaßen:</p>
<pre><code>MainWindow::MainWindow() : RootWindow(NULL)
{
	InfoDialog InfoDlgInit(hWnd, IDD_INFO);
	InfoDlg	= InfoDlgInit;
};
</code></pre>
<p>Diese Lösung finde ich schon äußert unbefriedigend: Das Objekt sollte sich doch eher selbst (mittels Konstruktor) initialisieren, statt eine andere Instanz diese Arbeit erledigen zu lassen und dieses dann zu kopieren.<br />
Richtig blöd wird das ganze aber, wenn ich im Konstruktor einen Zeiger auf das aktuelle Objekt (this) woanders speichern will (brauche das für Callback als Elementfunktion). Dann muss ich zusätzlich für den Konstruktor des Initialisierungsobjekts (InfoDlgInit) einen Zeiger auf das Objektelement (MainWindow::InfoDlg) übergeben.</p>
<p>Wohl gemerkt, es geht mir hier <strong>nicht</strong> um den WinAPI-Kram (dafür brauche ich die Objekte halt blos), sondern darum, wie ich MainWindow::InfoDlg vernünftig initialisieren kann. Sprich: Parameter an dessen Konstruktor übergeben.</p>
<p>Hoffe ihr könnt mir weiterhelfen, bin leider (noch) ziemlich unerfahren.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Vielen Dank im Voraus und Gruß,<br />
Nils.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079225</guid><dc:creator><![CDATA[SanPedro]]></dc:creator><pubDate>Fri, 16 Jun 2006 23:16:50 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Fri, 16 Jun 2006 23:29:38 GMT]]></title><description><![CDATA[<p>Das ist doch über die Initialisierungsliste des Konstruktors wie folgt möglich:</p>
<pre><code class="language-cpp">MainWindow::MainWindow() : RootWindow(NULL), InfoDlg(hWnd, IDD_INFO)
{
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1079228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079228</guid><dc:creator><![CDATA[Vellas]]></dc:creator><pubDate>Fri, 16 Jun 2006 23:29:38 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Fri, 16 Jun 2006 23:28:43 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>dafür gibt es in C++ den Elementinitialisierer... schreckliches Wort.</p>
<pre><code class="language-cpp">class Bla
{
Bla(int a, int b){}
};

class Blub
{
private:
Bla a;
public:
Blub();
};

Blub::Blub() : Bla(10,20) // !
{}
</code></pre>
<p>MfG Eisflamme <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title="=)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079227</guid><dc:creator><![CDATA[Mis2com]]></dc:creator><pubDate>Fri, 16 Jun 2006 23:28:43 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Fri, 16 Jun 2006 23:29:40 GMT]]></title><description><![CDATA[<p>*g* ok, deine Version is präziser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079230</guid><dc:creator><![CDATA[Mis2com]]></dc:creator><pubDate>Fri, 16 Jun 2006 23:29:40 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Fri, 16 Jun 2006 23:30:14 GMT]]></title><description><![CDATA[<p>Dafür war ich zu langsam ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079231</guid><dc:creator><![CDATA[Vellas]]></dc:creator><pubDate>Fri, 16 Jun 2006 23:30:14 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Fri, 16 Jun 2006 23:32:16 GMT]]></title><description><![CDATA[<p>Mach dir nix draus, ich hab auch 10 Minuten rumgerätselt, ob das jetzt wirklich mit dem Elementinitiali... also mit der Initialisierungsliste (&lt;- danke für den Begriff, auch wenn ich mir net sicher bin, ob der viel besser ist X'D) so funktioniert. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title="=)"
      alt="🙂"
    /></p>
<p>MfG Eisflammä</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079233</guid><dc:creator><![CDATA[Mis2com]]></dc:creator><pubDate>Fri, 16 Jun 2006 23:32:16 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Fri, 16 Jun 2006 23:34:10 GMT]]></title><description><![CDATA[<p>ah, das ging flott... thx!<br />
gleich mal testen. hätt ich ja auch drauf kommen können, dachte das funktioniert nur um parameter an konstruktoren in der hierachie nach &quot;oben&quot; zu reichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079236</guid><dc:creator><![CDATA[SanPedro]]></dc:creator><pubDate>Fri, 16 Jun 2006 23:34:10 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Fri, 16 Jun 2006 23:37:36 GMT]]></title><description><![CDATA[<p>Nein, das Funktioniert auch mit built-in-Typen (z.B. int):</p>
<pre><code class="language-cpp">class foo {
  int bar;
  foo() : bar(0) {}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1079239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079239</guid><dc:creator><![CDATA[Vellas]]></dc:creator><pubDate>Fri, 16 Jun 2006 23:37:36 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Fri, 16 Jun 2006 23:38:48 GMT]]></title><description><![CDATA[<p>ja. Eben darauf bin ich dann auch gekommen ^^ und dann dachte ich mir: Mensch, dann muss das da doch auch gehn. X'D</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079240</guid><dc:creator><![CDATA[Mis2com]]></dc:creator><pubDate>Fri, 16 Jun 2006 23:38:48 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Fri, 16 Jun 2006 23:55:39 GMT]]></title><description><![CDATA[<p>okay, das funktioniert im prinzip schonmal.. danke nochmal.<br />
ABER, was mach ich im folgenden fall:</p>
<pre><code>class A
{
  A(int x){y=x};
  int y;
};
class B
{
  B(z=3):a(z)
  A a;
  int z;
};
</code></pre>
<p>der konstruktor von a wird aufgerufen, bevor z feststeht! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079248</guid><dc:creator><![CDATA[SanPedro]]></dc:creator><pubDate>Fri, 16 Jun 2006 23:55:39 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Fri, 16 Jun 2006 23:59:02 GMT]]></title><description><![CDATA[<p>Du solltest den Parameter von B nicht auch unbedingt z nennen (mal abgesehen davon das er keinen Typ bekommen hat ;)) und dann kannst du es z.B. so machen:</p>
<pre><code class="language-cpp">class A
{
  A(int x) : y(x) {}
  int y;
};
class B
{
  B(int wert=3) : z(wert), a(wert) {}
  A a;
  int z;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1079249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079249</guid><dc:creator><![CDATA[Vellas]]></dc:creator><pubDate>Fri, 16 Jun 2006 23:59:02 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Sat, 17 Jun 2006 00:05:07 GMT]]></title><description><![CDATA[<p>sorry, hab mich vertan, meinte folgendes:</p>
<pre><code>class A
{
  A(int x){y=x};
  int y;
};
class B
{
  B();
  A a;
  int z;
};
B::B() : a(z)
{
  z=3 // nur ein Bsp, daß hier etwas mit z passiert, DIESES z soll a initialisieren
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1079251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079251</guid><dc:creator><![CDATA[SanPedro]]></dc:creator><pubDate>Sat, 17 Jun 2006 00:05:07 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Sat, 17 Jun 2006 00:14:07 GMT]]></title><description><![CDATA[<p>Dann machst du es so ähnlich:</p>
<pre><code class="language-cpp">class A
{
  A(int x){y=x};
  int y;
};

class B
{
  int z;
  A a;
  B();
};

B::B() : z(3), a(z)
{
}
</code></pre>
<p>Zu beachten ist allerdings noch etwas bei dem Konstruktor:<br />
Damit z vor a initialisiert wird, muss z vor a deklariert sein in der Klasse. Die Reihenfolge in der Initialisierungsliste spielt keine Rolle, sondern die Reihenfolge der Deklaration der Variablen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079252</guid><dc:creator><![CDATA[Vellas]]></dc:creator><pubDate>Sat, 17 Jun 2006 00:14:07 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Sat, 17 Jun 2006 00:14:42 GMT]]></title><description><![CDATA[<p>glaub ich kanns selber beantworten:</p>
<pre><code>class A
{
  A(int x){y=x};
  int y;
};
class B
{
  B();
  int z;
  A a;
};
B::B() : z(3), a(z)
{
};
</code></pre>
<p>oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079253</guid><dc:creator><![CDATA[SanPedro]]></dc:creator><pubDate>Sat, 17 Jun 2006 00:14:42 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Sat, 17 Jun 2006 00:17:57 GMT]]></title><description><![CDATA[<p>hehe, zeitgleich! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
naja, jetzt wirds dann leider doch off topic (bzw falsches forum):<br />
das prob is, daß z bei mir nich so einfach festgelegt wird wie im beispiel.<br />
es ist ein HWND und dem geht das füllen einer WNDCLASSEX und der aufruf von CreateWindowEx(...) voraus.<br />
falls du da noch weiterhelfen kannst?!?!<br />
werd mal schauen, ob ich das irgendwie hinbekomme..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079254</guid><dc:creator><![CDATA[SanPedro]]></dc:creator><pubDate>Sat, 17 Jun 2006 00:17:57 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Sat, 17 Jun 2006 00:17:00 GMT]]></title><description><![CDATA[<p>Fast! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Siehe meine Anmerkung. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079255</guid><dc:creator><![CDATA[Vellas]]></dc:creator><pubDate>Sat, 17 Jun 2006 00:17:00 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Sat, 17 Jun 2006 00:19:30 GMT]]></title><description><![CDATA[<p>Vellas schrieb:</p>
<blockquote>
<p>Fast! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Siehe meine Anmerkung. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>hab doch z vor a deklariert! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079257</guid><dc:creator><![CDATA[SanPedro]]></dc:creator><pubDate>Sat, 17 Jun 2006 00:19:30 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Sat, 17 Jun 2006 00:25:03 GMT]]></title><description><![CDATA[<p>Ops übersehen, sry. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Zu dem anderen kann ich so nix sagen, hast da sonst nochmal ein Minimalbeispiel, wie das HWND gefüllt werden muss bzw. welche Operationen stattfinden müssen bevor &quot;InfoDlg(hWnd, IDD_INFO);&quot; aufgerufen werden soll?<br />
Ansonsten musst du wohl doch den Umweg über die temporäre Variable gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079258</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079258</guid><dc:creator><![CDATA[Vellas]]></dc:creator><pubDate>Sat, 17 Jun 2006 00:25:03 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Sat, 17 Jun 2006 00:44:12 GMT]]></title><description><![CDATA[<p>das hab ich ihn etwa vor:</p>
<pre><code>class A
{
  A(int x){y=x};
  int y;
};
class B
{
  B();
  int z;
  A a;
};
B::B() : a(z)   // funktioniert nicht wie gewollt, da z noch nicht definiert
{
  m = f();      // hier wird ein struct mit werten gefüllt
  z = g(m);     // z wird mittels dieses structs bestimmt
};
</code></pre>
<p>sowas dürfte funktionieren:</p>
<pre><code>class A
{
  A(int x){y=x};
  int y;
};
class C
{
  int z;
  C()
  {
    m = f();      // hier wird ein struct mit werten gefüllt
    z = g(m);     // z wird mittels dieses structs bestimmt
  };
};
class B
{
  B();
  C c;
  A a;
};
B::B() : c() a(c.z)
{ 
};
</code></pre>
<p>für m hab ich mir mal die deklaration gespart...<br />
im prinzip sollte es so irgendwie funktionieren, oder?<br />
schön is das aber auch nich richtig. is dann wieder eine unnötige klasse. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>noch ne andere idee, wenn ich m global mache (wäre nicht ganz unsinnig):</p>
<pre><code>B::B() : a(g(m))
{
};
</code></pre>
<p>naja, werd mal schauen, was ich so hinbekomme. rumwurschteln hat ja eh imme rden besten lerneffekt! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
jedenfalls nochmal vielen dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079259</guid><dc:creator><![CDATA[SanPedro]]></dc:creator><pubDate>Sat, 17 Jun 2006 00:44:12 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Sat, 17 Jun 2006 12:41:31 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>also bei der Windowsprogrammierung geht es ja eigentlich immer um irgendwelche HWND-Strukturen oder so und da konstruiert man ja nichts durch den ctor sondern setzt einfach alle Werte.<br />
Na ja, davon abgesehen kannst du auch zur Laufzeit ein Objekt erstellen, wenn du mit Zeigern arbeitest.</p>
<pre><code class="language-cpp">class Bla
{
Bla(int a, b) {}
};

class Blup
{
private:
Bla* a;
public:
Blup(int c);
~Blup();
};

Blup::Blup(int c)
{
// mache irgendwas
a = new Bla(x, y);
}

Blup::~Blup()
{
delete a;
}
</code></pre>
<p>Das macht man allgemein bei dynamisch bzw. zur Laufzeit erstellten Objekten so... Zu beachten ist dann aber, dass du zu einem new natürlich immer ein delete brauchst.<br />
Ob in deinem Fall Zeiger nötig sind, weiß ich aber gerade nicht zu beurteilen.</p>
<p>MfG Eisflamme</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079452</guid><dc:creator><![CDATA[Mis2com]]></dc:creator><pubDate>Sat, 17 Jun 2006 12:41:31 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Sat, 17 Jun 2006 15:34:29 GMT]]></title><description><![CDATA[<p>Naja, entweder er benutzt Zeiger oder geht über eine temporäre Variable, wie er es zuvor gemacht hat. Da würde ich die Zeiger-Version noch bevorzugen.<br />
Oder aber er übergibt als Parameter einen entsprechenden Typ und initialisiert seine Variable damit:</p>
<pre><code class="language-cpp">class foo {
  InfoDialog info;
public:
  foo(InfoDialog infoDlg) : info(infoDlg) {}
};

int main() {
  // HWND irgendwo erstellen
  InfoDialog info(hwnd, IDD_INFO);
  foo(info);
}
</code></pre>
<p>Somit hätte er dann auch das Handle initialisiert, welches seine InfoStruktur benötigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079571</guid><dc:creator><![CDATA[Vellas]]></dc:creator><pubDate>Sat, 17 Jun 2006 15:34:29 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von Objektelementen on Sat, 17 Jun 2006 17:08:20 GMT]]></title><description><![CDATA[<p>Mis2com schrieb:</p>
<blockquote>
<p>Hi,</p>
<p>also bei der Windowsprogrammierung geht es ja eigentlich immer um irgendwelche HWND-Strukturen oder so und da konstruiert man ja nichts durch den ctor sondern setzt einfach alle Werte.<br />
Na ja, davon abgesehen kannst du auch zur Laufzeit ein Objekt erstellen, wenn du mit Zeigern arbeitest.</p>
<pre><code class="language-cpp">class Bla
{
Bla(int a, b) {}
};

class Blup
{
private:
Bla* a;
public:
Blup(int c);
~Blup();
};

Blup::Blup(int c)
{
// mache irgendwas
a = new Bla(x, y);
}

Blup::~Blup()
{
delete a;
}
</code></pre>
<p>Das macht man allgemein bei dynamisch bzw. zur Laufzeit erstellten Objekten so... Zu beachten ist dann aber, dass du zu einem new natürlich immer ein delete brauchst.<br />
Ob in deinem Fall Zeiger nötig sind, weiß ich aber gerade nicht zu beurteilen.</p>
<p>MfG Eisflamme</p>
</blockquote>
<p>dann nehmen wir aber am besten eine scoped_ptr, das hat nur vorteile:<br />
- scoped_ptr kann nicht kopiert werden, also kann der compiler auch für unsere klasse keinen copy-ctor und copy-zuweisungs op definieren. wenn wir diese wollen, müssten wir sie sowieso selbst definiern.<br />
- den destruktor brauchen wir nicht mehr<br />
- falls wir noch so ein member brauchen, ist das ganze gleich exceptionsicher, ohne etra noch try-catch kaskaden zu benötigen</p>
<p>also:</p>
<pre><code class="language-cpp">class Blup
{
private:
boost::scoped_ptr&lt;Bla&gt; a;
public:
Blup(int c);
};

Blup::Blup(int c)
: a() // ctor ist explicit
{
a.reset(new Bla(x,y));
// mache irgendwas
}
</code></pre>
<p>für die eigentliche initialisierungsproblematik sei noch auf das hier <a href="http://www.boost.org/libs/utility/base_from_member.html" rel="nofollow">http://www.boost.org/libs/utility/base_from_member.html</a> verwiesen. das trifft das problem ja wohl exakt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079610</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 17 Jun 2006 17:08:20 GMT</pubDate></item></channel></rss>