<?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[Fragen zu folgendem Konstruktor]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich arbeite mich gerade durch das Buch 'Einstieg in Visual C++ 2008' durch.<br />
Ich bin gerade bei 'dynamische Speicherverwaltung' und 'Destruktoren'.<br />
Die Übung die ich da machen soll habe ich nur zur Hälfte lösen können und deshalb habe ich mir mal die Lösungen auf der mitgelieferten CD angesehen.<br />
Da taucht folgender Konstruktor auf den ich nicht verstehe. Vielleicht könnte mir jemand erklären was der für eine Bedeutung hat.</p>
<pre><code>class DynIntFeld {
  int *feld;
  int groesse;
  int kapazitaet;

public:
  DynIntFeld()
  : feld(new int[2]), groesse(0), kapazitaet(2)    &lt;--- Verstehe ich nicht!!
  {}
}
</code></pre>
<p>grüße</p>
<p>sub</p>
<p>p.s.</p>
<p>Ich habe da noch eine Frage:<br />
Muß ich eigentlich wenn ich eine Klasse.h erstelle eine Klasse.cpp erstellen?<br />
Oder kann ich alle Definitionen auch in die Klasse.h reinschreiben?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/251941/fragen-zu-folgendem-konstruktor</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 04:22:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/251941.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 12 Oct 2009 20:15:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fragen zu folgendem Konstruktor on Mon, 12 Oct 2009 20:15:12 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich arbeite mich gerade durch das Buch 'Einstieg in Visual C++ 2008' durch.<br />
Ich bin gerade bei 'dynamische Speicherverwaltung' und 'Destruktoren'.<br />
Die Übung die ich da machen soll habe ich nur zur Hälfte lösen können und deshalb habe ich mir mal die Lösungen auf der mitgelieferten CD angesehen.<br />
Da taucht folgender Konstruktor auf den ich nicht verstehe. Vielleicht könnte mir jemand erklären was der für eine Bedeutung hat.</p>
<pre><code>class DynIntFeld {
  int *feld;
  int groesse;
  int kapazitaet;

public:
  DynIntFeld()
  : feld(new int[2]), groesse(0), kapazitaet(2)    &lt;--- Verstehe ich nicht!!
  {}
}
</code></pre>
<p>grüße</p>
<p>sub</p>
<p>p.s.</p>
<p>Ich habe da noch eine Frage:<br />
Muß ich eigentlich wenn ich eine Klasse.h erstelle eine Klasse.cpp erstellen?<br />
Oder kann ich alle Definitionen auch in die Klasse.h reinschreiben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791634</guid><dc:creator><![CDATA[sub-elektro]]></dc:creator><pubDate>Mon, 12 Oct 2009 20:15:12 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu folgendem Konstruktor on Tue, 13 Oct 2009 08:17:02 GMT]]></title><description><![CDATA[<p>sub-elektro schrieb:</p>
<blockquote>
<p>Da taucht folgender Konstruktor auf den ich nicht verstehe.</p>
</blockquote>
<p>Stichwort -&gt; Elementinitialisierer</p>
<blockquote>
<p>Muß ich eigentlich wenn ich eine Klasse.h erstelle eine Klasse.cpp erstellen? Oder kann ich alle Definitionen auch in die Klasse.h reinschreiben?</p>
</blockquote>
<p>es ist von Vorteil alles was Code ist in die CPP zu schreiben und in der H nur die Deklarationen stehen zu haben ... kannst aber auch alles in die H schreiben ... Probleme wirst Du bei größeren Projekte haben - wenn alles in H steht</p>
<p>hand, mogel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791784</guid><dc:creator><![CDATA[mogel]]></dc:creator><pubDate>Tue, 13 Oct 2009 08:17:02 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu folgendem Konstruktor on Tue, 13 Oct 2009 13:14:39 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Danke erstmal!<br />
Die Lösung hat dann aber 2 Kontsruktoren mit Elementinitialisierer.</p>
<pre><code>class DynIntFeld {
  int *feld;
  int groesse;
  int kapazitaet;

public:
  DynIntFeld()
  : feld(new int[2]), groesse(0), kapazitaet(2)
  {}

  DynIntFeld(int g)
  : groesse(g), kapazitaet(g) {
    feld = new int[groesse];
  }
  ~DynIntFeld() {
    delete[](feld);
  }
</code></pre>
<p>So sehen die Konstruktoren/Destruktoren aus.<br />
Den 2. Konstruktor verstehe ich. So habe ich das auch gelöst, aber beim 1. verstehe ich</p>
<pre><code>feld(new int[2])
</code></pre>
<p>nicht. Und wieso sthet hinter Kapazität in der Klammer keine 1 ?</p>
<p>Könntest Du das bitte etwas genauer erklären?</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791977</guid><dc:creator><![CDATA[sub-elektro]]></dc:creator><pubDate>Tue, 13 Oct 2009 13:14:39 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu folgendem Konstruktor on Tue, 13 Oct 2009 18:01:57 GMT]]></title><description><![CDATA[<p>weil <em>feld</em> ein Zeiger auf ein Int ist und keine ganze Zahl</p>
<pre><code class="language-cpp">int *feld = new int[2]; // richtig
int *feld = 1; // ungünstig
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1792153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792153</guid><dc:creator><![CDATA[mogel]]></dc:creator><pubDate>Tue, 13 Oct 2009 18:01:57 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu folgendem Konstruktor on Tue, 13 Oct 2009 19:15:42 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-18363.html" rel="nofollow">Jochen Kalmbach</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-58.html" rel="nofollow">C++/CLI mit .NET</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792225</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Tue, 13 Oct 2009 19:15:42 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu folgendem Konstruktor on Wed, 14 Oct 2009 10:28:50 GMT]]></title><description><![CDATA[<p>Nein, mogel, so hat der OT das nicht gemeint.</p>
<p>Die initiale Kapazität wurde auf 2 gesetzt, also muß auch das Feld entsprechend dimensioniert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792450</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 14 Oct 2009 10:28:50 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu folgendem Konstruktor on Wed, 14 Oct 2009 11:12:38 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18594">@Th69</a></p>
<p>Ja genau das habe ich gemeint.<br />
Danke!</p>
<p>Zusätzlich aber noch:</p>
<p>Ich kenne diese Definition</p>
<pre><code>int *feld;
feld = new int[xy];
</code></pre>
<p>aber diese</p>
<pre><code>feld(new int[2])
</code></pre>
<p>kenne ich nur, wenn feld eine Methode wäre.<br />
Ist die Bedeutung hier entsprecehend?<br />
Also:</p>
<pre><code>new int[2]
</code></pre>
<p>ist quasi der Parameter des dynamischen Feldes feld und</p>
<pre><code>new int [0]/[1] = groesse
</code></pre>
<p>und</p>
<pre><code>new int[2] = Kapazität
</code></pre>
<p>?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792475</guid><dc:creator><![CDATA[sub-elektro]]></dc:creator><pubDate>Wed, 14 Oct 2009 11:12:38 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu folgendem Konstruktor on Wed, 14 Oct 2009 11:38:14 GMT]]></title><description><![CDATA[<p>Nein, ich glaube, du denkst zu kompliziert.</p>
<p>Es werden einfach die drei Variablen initialisiert, d.h. Werte zugewiesen.<br />
Innerhalb eines Funktionsblockes würdest du einfach</p>
<pre><code class="language-cpp">feld = new int[2];
groesse = 0;
kapazitaet = 2;
</code></pre>
<p>schreiben.<br />
Und innerhalb der Initialisierungsliste schreibst du halt die Werte innerhalb der runden Klammern (ist also nur eine etwas andere Syntax).</p>
<p>Und die 2 in eckigen Klammern ist halt der selbe Wert wie die Kapazität (sonst würde ja die Invariante(!) nicht gelten).</p>
<p>Du könnest auch</p>
<pre><code class="language-cpp">kapazitaet = 2;
feld = new int[kapazität];
groesse = 0;
</code></pre>
<p>schreiben, d.h. die Reihenfolge verändern.</p>
<p>Bei der Initialisierungsliste ist jedoch</p>
<pre><code class="language-cpp">kapazitaet(2), feld(new int[kapazitaet]), groesse(0)
</code></pre>
<p>SEHR fehleranfällig, da die Initialisierungsreihenfolge anhand der Memberreihenfolge vorgenommen wird (d.h. laut deiner Definition würde erst 'feld' initialisiert, aber 'kapazitaet' hätte noch keinen Wert zugewiesen bekommen und wäre daher zufällig.</p>
<p>Als bessere Variante wäre daher die Definition einer Konstanten:</p>
<pre><code class="language-cpp">class DynIntFeld
{
  int *feld;
  int groesse;
  int kapazitaet;

  static const int InitCapacity = 2; // Anmerkung s. u

public:
  DynIntFeld()
  : feld(new int[InitCapacity]), groesse(0), kapazitaet(InitCapacity)
  {}
};
</code></pre>
<p>Falls du einen älteren Compiler hast, mußt du evtl. auf enums ausweichen:</p>
<pre><code class="language-cpp">enum { InitCapacity = 2 };
</code></pre>
<p>So ich hoffe, ich habe jetzt alle 'Klarheiten' beseitigt <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/1792497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792497</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 14 Oct 2009 11:38:14 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu folgendem Konstruktor on Wed, 14 Oct 2009 12:03:59 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Alles klar! Danke! Das habe ich verstanden!</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792513</guid><dc:creator><![CDATA[sub-elektro]]></dc:creator><pubDate>Wed, 14 Oct 2009 12:03:59 GMT</pubDate></item></channel></rss>