<?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 kann nur 1x aufgerufen werden, oder?]]></title><description><![CDATA[<p>In meinem Buch steht, man darf das machen:</p>
<pre><code class="language-cpp">// Klasse Euro wie in meinem letzten Thread
Euro verkauf;
verkauf += Euro(1.49);
</code></pre>
<p>(+= wurde normal überladen)</p>
<p>Also ist der Aufruf: verkauf.operator+=( Euro(1.49));</p>
<p>Die Operatorfunktion erwartet aber const Euro&amp;.</p>
<p>Im Buch steht, der Euro-Konstruktor erzeugt aus dem double-Wert ein Euro-Objekt.</p>
<p>Ich dachte, man kann einen Konstruktor gar nicht aufrufen und der wird automatisch aufgerufen beim erzeugen des Objekts?</p>
<p>Für welches Objekt wird der da überhaupt aufgerufen? Sieht aus wie ein globaler Konstruktor <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/topic/145401/konstruktor-kann-nur-1x-aufgerufen-werden-oder</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 05:21:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/145401.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 Apr 2006 15:15:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konstruktor kann nur 1x aufgerufen werden, oder? on Thu, 27 Apr 2006 15:15:36 GMT]]></title><description><![CDATA[<p>In meinem Buch steht, man darf das machen:</p>
<pre><code class="language-cpp">// Klasse Euro wie in meinem letzten Thread
Euro verkauf;
verkauf += Euro(1.49);
</code></pre>
<p>(+= wurde normal überladen)</p>
<p>Also ist der Aufruf: verkauf.operator+=( Euro(1.49));</p>
<p>Die Operatorfunktion erwartet aber const Euro&amp;.</p>
<p>Im Buch steht, der Euro-Konstruktor erzeugt aus dem double-Wert ein Euro-Objekt.</p>
<p>Ich dachte, man kann einen Konstruktor gar nicht aufrufen und der wird automatisch aufgerufen beim erzeugen des Objekts?</p>
<p>Für welches Objekt wird der da überhaupt aufgerufen? Sieht aus wie ein globaler Konstruktor <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/1046473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046473</guid><dc:creator><![CDATA[Frinz]]></dc:creator><pubDate>Thu, 27 Apr 2006 15:15:36 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor kann nur 1x aufgerufen werden, oder? on Thu, 27 Apr 2006 15:21:48 GMT]]></title><description><![CDATA[<p>Genau, ein Konstruktor darf nur einmal für jedes Objekt aufgerufen werden. Genau das passiert hier: Du rufst den Konstruktor von Euro mit einem double-Wert auf. Ohne ein damit verknüpftes Symbol erzeugt der Konstruktor allein ein temporäres Objekt von Euro, und übergibt dieses an den operator+=. Danach wird das temporäre Euro-Objekt wieder gelöscht. Im Grunde passiert dies (nur ohne den Namen &quot;temp&quot;)</p>
<pre><code class="language-cpp">Euro verkauf;
{ const Euro temp(1.49); 
  verkauf += temp; 
} // temp wird hier gelöscht
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1046479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046479</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 27 Apr 2006 15:21:48 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor kann nur 1x aufgerufen werden, oder? on Thu, 27 Apr 2006 15:25:02 GMT]]></title><description><![CDATA[<p>Ausprobieren!</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Euro
{
public:
    Euro(double wert = 0) : m_wert(wert)
    {
        cout &lt;&lt; &quot;Konstruktor mit &quot; &lt;&lt; m_wert &lt;&lt; &quot; Euro!&quot; &lt;&lt; endl;
    }

    Euro operator+=(const Euro &amp;euro)
    {
        return Euro(m_wert + euro.m_wert);
    }

private:
    double m_wert;
};

int main()
{
    Euro verkauf;
    verkauf += Euro(1.49);
    verkauf += 3;
    cin.get();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1046485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046485</guid><dc:creator><![CDATA[schorsch code]]></dc:creator><pubDate>Thu, 27 Apr 2006 15:25:02 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor kann nur 1x aufgerufen werden, oder? on Thu, 27 Apr 2006 15:27:27 GMT]]></title><description><![CDATA[<p>hoppla</p>
<pre><code class="language-cpp">Euro &amp;operator+=(const Euro &amp;euro)
    {
        m_wert += euro.m_wert;
        return *this;
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1046488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046488</guid><dc:creator><![CDATA[schorsch code]]></dc:creator><pubDate>Thu, 27 Apr 2006 15:27:27 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor kann nur 1x aufgerufen werden, oder? on Thu, 27 Apr 2006 15:28:43 GMT]]></title><description><![CDATA[<p>&quot;Ohne ein damit verknüpftes Symbol erzeugt der Konstruktor allein ein temporäres Objekt von Euro&quot;</p>
<p>Das wusste ich nicht. Entweder ich habs überlesen oder es steht nicht im Buch.<br />
(2. Ausgabe von Lernen und prof. anwenden, hätte gern die 3. :()</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1046489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046489</guid><dc:creator><![CDATA[Frinz]]></dc:creator><pubDate>Thu, 27 Apr 2006 15:28:43 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor kann nur 1x aufgerufen werden, oder? on Thu, 27 Apr 2006 15:32:13 GMT]]></title><description><![CDATA[<p>Sind diese beiden Ausrücke eigentlich äquivalent?</p>
<p>(Euro)1.49 Hier wird doch double in Euro gecastet, also der Ausdruck repräsentiert ein Euro-Objekt, oder? Aber wie weiß man, welches Element mit 1.49 initialisiert wird?</p>
<p>Euro(1.49)</p>
<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1046496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046496</guid><dc:creator><![CDATA[Frinz]]></dc:creator><pubDate>Thu, 27 Apr 2006 15:32:13 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor kann nur 1x aufgerufen werden, oder? on Thu, 27 Apr 2006 15:34:45 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>nein das ist nicht äquivalent.<br />
Das erste ist ein C-style Cast, das zweite ein Konstruktor-Aufruf. beides brauch aber einen passenden L-Value, dem das ergebnis zugewiesen wird, ansonsten verfällt dieses.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1046500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046500</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Thu, 27 Apr 2006 15:34:45 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor kann nur 1x aufgerufen werden, oder? on Thu, 27 Apr 2006 15:35:38 GMT]]></title><description><![CDATA[<p>Ein Cast der eine Umwandlung erfordert kann auch ein temporäres Objekt erzeugen, wenn erforderlich. An die privaten Daten eines Objekts kommst Du ja nicht ran, deshalb schreibt er den Wert auch nicht einfach in das erste (erstbeste) Datenfeld. Die beiden Ausdrücke sind äquivalent.</p>
<p>Anders ist es wenn eine Konvertierung verfügbar ist, aber dann wird es der Compiler ziemlich wahrscheinlich weg optimieren.</p>
<pre><code class="language-cpp">// Nicht zwingend äquivalent:
int x = (int)3.25; // explizite double nach int Konvertierung
int x = int(x); // implizite double nach int Konvertierung und Erzeugung eines temporären int, darf aber wegoptimiert werden wodurch es wieder zu obiger Form äquivalent wird
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1046501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046501</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 27 Apr 2006 15:35:38 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor kann nur 1x aufgerufen werden, oder? on Thu, 27 Apr 2006 15:36:34 GMT]]></title><description><![CDATA[<p>akari schrieb:</p>
<blockquote>
<p>nein das ist nicht äquivalent.<br />
Das erste ist ein C-style Cast, das zweite ein Konstruktor-Aufruf.</p>
</blockquote>
<p>Was passiert denn bei einem C-Style Cast für den keine implizite Umwandlung bereitsteht, wenn nicht eine temporary Konstruktion?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1046503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046503</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 27 Apr 2006 15:36:34 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor kann nur 1x aufgerufen werden, oder? on Thu, 27 Apr 2006 15:41:25 GMT]]></title><description><![CDATA[<p>Danke... ich werde versuchen es zu verstehen.<br />
Ist nicht ganz einfach, C++ bietet ja sehr viele Möglichkeiten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":O"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1046509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046509</guid><dc:creator><![CDATA[Frinz]]></dc:creator><pubDate>Thu, 27 Apr 2006 15:41:25 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor kann nur 1x aufgerufen werden, oder? on Thu, 27 Apr 2006 15:51:56 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>der Cast läßt einfach auf den Speicherbereich, der hinter der Variablen a vom Typ A liegt, als Typ B zugreifen.<br />
Beispiel :</p>
<pre><code class="language-cpp">int a = 0;
float* b = (float*)(&amp;a);
</code></pre>
<p>wird kompilieren, aber verursacht beim Verwenden von *b undefinierte Fehler.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1046516</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046516</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Thu, 27 Apr 2006 15:51:56 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor kann nur 1x aufgerufen werden, oder? on Thu, 27 Apr 2006 17:03:47 GMT]]></title><description><![CDATA[<p>Aber wie kann ein int-Typ in einen Klassen-Typ gewandelt werden?<br />
Das verstehe ich nicht... Was wird wohin kopiert..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1046589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046589</guid><dc:creator><![CDATA[Frinz]]></dc:creator><pubDate>Thu, 27 Apr 2006 17:03:47 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor kann nur 1x aufgerufen werden, oder? on Thu, 27 Apr 2006 17:28:33 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>was für ein int-Wert wird in was für eine Klasse verwandelt? Wenn du dein Euro() besipiel meinst, das ist ein double-Wert.<br />
Die Klasse hat ein Konstruktor, der als Parameter ein double zuläßt. Das können auch ganz andere, von der eigentlichen Klasse unabhängige Typen sein. Ein Konstruktor ist was die Parameter angeht wir eine normale Funktion.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1046605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046605</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Thu, 27 Apr 2006 17:28:33 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor kann nur 1x aufgerufen werden, oder? on Thu, 27 Apr 2006 17:38:39 GMT]]></title><description><![CDATA[<p>Ich meinte das:</p>
<pre><code class="language-cpp">(Euro)1.49
</code></pre>
<p>Das ist doch kein Konstruktor-Aufruf...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1046612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046612</guid><dc:creator><![CDATA[Frinz]]></dc:creator><pubDate>Thu, 27 Apr 2006 17:38:39 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor kann nur 1x aufgerufen werden, oder? on Thu, 27 Apr 2006 17:49:25 GMT]]></title><description><![CDATA[<p>Das meinte ich auch als Frage an akari <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>
<p>Das mit dem Zeigerbeispiel war mir wohl klar, trifft hier aber ziemlich sicher nicht zu. Was stattdessen, da lasse ich mich gerne belehren, aber ein (Euro)2.56 versucht ziemlich sicher nicht eine Speicherzelle an der sich ein double befindet als Euro-Objekt zu interpretieren.</p>
<p>Einfachstes Beispiel:</p>
<pre><code class="language-cpp">string a = (string) &quot;Hallo, Welt&quot;;
</code></pre>
<p>Wenn der Cast hier das Literal als Verwaltungsdaten für die Klasse string interpretieren würde, wäre das wohl ziemlich tödlich <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/1046624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046624</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 27 Apr 2006 17:49:25 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor kann nur 1x aufgerufen werden, oder? on Thu, 27 Apr 2006 17:52:53 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>in beiden Fälle nwird tatsächlich der Konstruktor der jeweiligen Adresse aufgerufen. Das kann aber nur passieren ,wenn ein Konstruktor für genau diesen Parameter definiert ist.<br />
Dann wir also ein tempöräres Objekt erstellt und per Zuwesiungoperator an den L-Value übergeben.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1046628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046628</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Thu, 27 Apr 2006 17:52:53 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor kann nur 1x aufgerufen werden, oder? on Thu, 27 Apr 2006 18:01:52 GMT]]></title><description><![CDATA[<p>Frinz bedankt sich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1046635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046635</guid><dc:creator><![CDATA[Frinz]]></dc:creator><pubDate>Thu, 27 Apr 2006 18:01:52 GMT</pubDate></item></channel></rss>