<?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[default-Konstruktor]]></title><description><![CDATA[<p>Hallo,</p>
<p>angenommen, ich hab eine Klasse ohne definierten Konstruktor:</p>
<pre><code class="language-cpp">class Klasse{
}
</code></pre>
<p>Gibt es eigentlich einen Unterschied darin, wie man ein Objekt erzeugt:<br />
also</p>
<p>Klasse* k = new Klasse();<br />
oder<br />
Klasse* k = new Klasse;</p>
<p>Wir haben structs immer ohne diese Klammern erzeugt. Jetzt hab ich gelesen, dass der Unterschied zwischen structs und class minimal ist und diese schreibweise für Klassen probiert...<br />
Macht das hier einen Unterschied?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/275582/default-konstruktor</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 17:12:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/275582.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 17 Oct 2010 15:33:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to default-Konstruktor on Sun, 17 Oct 2010 15:33:27 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>angenommen, ich hab eine Klasse ohne definierten Konstruktor:</p>
<pre><code class="language-cpp">class Klasse{
}
</code></pre>
<p>Gibt es eigentlich einen Unterschied darin, wie man ein Objekt erzeugt:<br />
also</p>
<p>Klasse* k = new Klasse();<br />
oder<br />
Klasse* k = new Klasse;</p>
<p>Wir haben structs immer ohne diese Klammern erzeugt. Jetzt hab ich gelesen, dass der Unterschied zwischen structs und class minimal ist und diese schreibweise für Klassen probiert...<br />
Macht das hier einen Unterschied?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1966754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1966754</guid><dc:creator><![CDATA[invoices]]></dc:creator><pubDate>Sun, 17 Oct 2010 15:33:27 GMT</pubDate></item><item><title><![CDATA[Reply to default-Konstruktor on Sun, 17 Oct 2010 15:35:55 GMT]]></title><description><![CDATA[<p>Gibt keinen Unterschied. Ich schreibe die Klammern aus gewohnheit. Die sind nur Pflicht wenn du Argumente an einen Nicht-Default-Konstruktor übergeben willst/musst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1966756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1966756</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sun, 17 Oct 2010 15:35:55 GMT</pubDate></item><item><title><![CDATA[Reply to default-Konstruktor on Sun, 17 Oct 2010 15:37:27 GMT]]></title><description><![CDATA[<p>Die Schreibweise ist gleichwertig, wenn deine Klasse einen Konstruktor hat, der keine Parameter übernimmt(eben z.B. den vom Compiler generierten)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1966758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1966758</guid><dc:creator><![CDATA[Oberon_0]]></dc:creator><pubDate>Sun, 17 Oct 2010 15:37:27 GMT</pubDate></item><item><title><![CDATA[Reply to default-Konstruktor on Sun, 17 Oct 2010 16:08:22 GMT]]></title><description><![CDATA[<p>Es gibt einen Unterschied, wenn Du das Objekt nicht mit new anlegst:</p>
<pre><code class="language-cpp">Klasse objekt;
</code></pre>
<p>legt ein Objekt an</p>
<pre><code class="language-cpp">Klasse funktion();
</code></pre>
<p>deklariert eine Funktion, die Klasse als Typen hat und keine Argumente nimmt.</p>
<p>mfg Torsten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1966771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1966771</guid><dc:creator><![CDATA[Torsten Robitzki]]></dc:creator><pubDate>Sun, 17 Oct 2010 16:08:22 GMT</pubDate></item><item><title><![CDATA[Reply to default-Konstruktor on Mon, 18 Oct 2010 12:12:45 GMT]]></title><description><![CDATA[<p>invoices schrieb:</p>
<blockquote>
<p>Jetzt hab ich gelesen, dass der Unterschied zwischen structs und class minimal ist und diese schreibweise für Klassen probiert...<br />
Macht das hier einen Unterschied?</p>
</blockquote>
<p>laut Stroustrup ist per definition ein struct eine klasse in der alles public ist.<br />
wenn man so will:<br />
struct Foo{…}; ist äquivalent zu class Foo{ public: … };</p>
<p>ich würde aber<br />
Klasse* k = new Klasse();<br />
bevorzugen. bei<br />
Klasse* k = new Klasse;<br />
denk ich immer an einen typo <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1967060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1967060</guid><dc:creator><![CDATA[ConfusedGuy]]></dc:creator><pubDate>Mon, 18 Oct 2010 12:12:45 GMT</pubDate></item><item><title><![CDATA[Reply to default-Konstruktor on Mon, 18 Oct 2010 13:35:43 GMT]]></title><description><![CDATA[<p>Ich würde</p>
<pre><code class="language-cpp">Klasse klasse = new Klasse;
</code></pre>
<p>bevorzugen, um konsistent zu</p>
<pre><code class="language-cpp">Klasse klasse;
</code></pre>
<p>zu sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1967112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1967112</guid><dc:creator><![CDATA[Panke_logged_out]]></dc:creator><pubDate>Mon, 18 Oct 2010 13:35:43 GMT</pubDate></item><item><title><![CDATA[Reply to default-Konstruktor on Mon, 18 Oct 2010 13:41:57 GMT]]></title><description><![CDATA[<p>ConfusedGuy schrieb:</p>
<blockquote>
<p>ich würde aber<br />
Klasse* k = new Klasse();<br />
bevorzugen. bei<br />
Klasse* k = new Klasse;<br />
denk ich immer an einen typo <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="😉"
    /></p>
</blockquote>
<p>Komisch.</p>
<p>ich würde aber<br />
Klasse* k = new Klasse;<br />
bevorzugen. bei<br />
Klasse* k = new Klasse();<br />
denk ich immer an einen typo <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1967117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1967117</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 18 Oct 2010 13:41:57 GMT</pubDate></item><item><title><![CDATA[Reply to default-Konstruktor on Mon, 18 Oct 2010 14:23:59 GMT]]></title><description><![CDATA[<p>ConfusedGuy schrieb:</p>
<blockquote>
<p>laut Stroustrup ist per definition ein struct eine klasse in der alles public ist.<br />
wenn man so will:</p>
</blockquote>
<p>Das gilt nur für c++, aber nicht für c oder?<br />
Oder konnte man in C auch schon Funktionen innerhalb structs definieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1967142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1967142</guid><dc:creator><![CDATA[invoices]]></dc:creator><pubDate>Mon, 18 Oct 2010 14:23:59 GMT</pubDate></item><item><title><![CDATA[Reply to default-Konstruktor on Mon, 18 Oct 2010 14:29:38 GMT]]></title><description><![CDATA[<p>ehh keine ahnung. aber da es keine klassen in c gibt verstehe ich deine frage nicht <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/1967143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1967143</guid><dc:creator><![CDATA[ConfusedGuy]]></dc:creator><pubDate>Mon, 18 Oct 2010 14:29:38 GMT</pubDate></item><item><title><![CDATA[Reply to default-Konstruktor on Mon, 18 Oct 2010 16:22:59 GMT]]></title><description><![CDATA[<p>invoices schrieb:</p>
<blockquote>
<p>angenommen, ich hab eine Klasse ohne definierten Konstruktor:</p>
<pre><code class="language-cpp">class Klasse{
}
</code></pre>
</blockquote>
<p>Ein richtiges Beispiel mit Datenelementen und ohne fehlendes ; wäre nett gewesen.</p>
<p>invoices schrieb:</p>
<blockquote>
<p>Gibt es eigentlich einen Unterschied darin, wie man ein Objekt erzeugt:<br />
also</p>
<p>Klasse* k = new Klasse();<br />
oder<br />
Klasse* k = new Klasse;</p>
<p>Wir haben structs immer ohne diese Klammern erzeugt. Jetzt hab ich gelesen, dass der Unterschied zwischen structs und class minimal ist und diese schreibweise für Klassen probiert...<br />
Macht das hier einen Unterschied?</p>
</blockquote>
<p>Es ist ziemlich wurscht, ob du hier class oder struct benutzt. Die Initialisierung macht aber schon einen Unterschied in diesem Fall. Denn hier handelt es sich um einen <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-194356.html" rel="nofollow">POD</a>-Typen. Und bei PODs führt das erste dazu, dass die Datenelemente &quot;value initialized&quot; werden und im zweiten Fall, also ohne die Klammern, die Elemente uninitialisiert bleiben.</p>
<p><a href="http://codepad.org/6wmrALHe" rel="nofollow">Beispiel</a>:</p>
<pre><code class="language-cpp">struct podclass {
  int i;
};

int main() {
  podclass* p = new podclass;   // keine Initialisierung
  podclass* q = new podclass(); // &quot;Wert-Initialisierung&quot;
  std::cout &lt;&lt; p-&gt;i &lt;&lt; '\n'; // #1
  std::cout &lt;&lt; q-&gt;i &lt;&lt; '\n'; // #2
}
</code></pre>
<p>#1 gibt in der Praxis Datenmüll aus. Strenggenommen ist das Auslesen von uninitialisierten Objekten (ausgenommen, man greift auf das Objekt per char* oder unsigned char* zu) verboten.<br />
#2 gibt 0 aus. &quot;value initialization&quot; bedeutet bei POD-Klassen dass alle Elemente &quot;value-initialized&quot; werden. Und bei Zeigern, Ganzzahlen und Floatingpoint-Variablen läuft das auf eine Initialisierung mit 0 hinaus. Das hat man vielleicht schonmal gesehen:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class vector
{
  ...
  vector( size_type n, T const&amp; c = T() );
  ...                               ^^^
  void resize( size_type n, T const&amp; c = T() );
  ...                                    ^^^
};
</code></pre>
<p>Hier findet auch auf Aufruferseite eine &quot;value initialization&quot; bzw eine &quot;default initialization&quot; von des Objekts vom Typ T statt, je nachdem, was T genau für ein Typ ist. Im Fall T=int, ist T ein POD und der std::vector wird mit Nullen gefüllt aufgrund der &quot;value initialization&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1967187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1967187</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 18 Oct 2010 16:22:59 GMT</pubDate></item><item><title><![CDATA[Reply to default-Konstruktor on Mon, 18 Oct 2010 20:36:33 GMT]]></title><description><![CDATA[<p>vielen dank für die antworten.</p>
<p>ist es allgemein so, dass alle Klassenattribute zu 0 gesetzt werden, wenn man das Objekt mittels<br />
podclass* q = new podclass();<br />
erstellt? Gilt das auch, wenn ich einen Konstruktor selber definiere? Kann ich mir dann allgemein immer eine Initialisierung mit 0 sparen, wenn die Attribute dann automatisch zu 0 gesetzt werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1967318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1967318</guid><dc:creator><![CDATA[invoices]]></dc:creator><pubDate>Mon, 18 Oct 2010 20:36:33 GMT</pubDate></item><item><title><![CDATA[Reply to default-Konstruktor on Mon, 18 Oct 2010 20:38:47 GMT]]></title><description><![CDATA[<p>invoices schrieb:</p>
<blockquote>
<p>ist es allgemein so, dass alle Klassenattribute zu 0 gesetzt werden, wenn man das Objekt mittels<br />
podclass* q = new podclass();<br />
erstellt?</p>
</blockquote>
<p>Wenn podclass ein POD ist, ja.</p>
<p>invoices schrieb:</p>
<blockquote>
<p>Gilt das auch, wenn ich einen Konstruktor selber definiere? Kann ich mir dann allgemein immer eine Initialisierung mit 0 sparen, wenn die Attribute dann automatisch zu 0 gesetzt werden?</p>
</blockquote>
<p>Nein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1967319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1967319</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 18 Oct 2010 20:38:47 GMT</pubDate></item></channel></rss>