<?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[Welche Konstruktoren werden aufgerufen?]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe hier eine alte Klausuraugabe bei der ich mir absolut nicht sicher bin.<br />
Gefragt ist, in welcher Zeile Konstruktoren der Klasse &quot;string&quot; aufgerufen werden... und wenn ja, welche:</p>
<p>1: //Programm 1<br />
2: string getline()<br />
3: {<br />
4: char buf[100];<br />
5: gets(buf);<br />
6: String ret = buf;<br />
7: return ret;<br />
8: ;</p>
<p>Meine Vermutung lautet so:<br />
2: Standardkonstruktor, es wird Platz für 100 Buchstaben angelegt.<br />
5: Kopierkonstruktor, die Tastatureingabe wird in den String buf Kopiert<br />
6: Standardkonstruktor: In dem überladenen Zuweisungsoperator von String wird der String reg angelegt, danach wird ihm buf zugewiesen</p>
<p>// Programm2<br />
1: //Programm 1<br />
2: string getline()<br />
3: {<br />
4: char buf[100];<br />
5: gets(buf);<br />
6: return buf;<br />
7: }</p>
<p>Hier würde ich genau dasselbe sagen, nur das hier kein string &quot;ret&quot; angelegt wird... allerdings gehe ich davon aus, dass ich da etwas gehörig übersehe.</p>
<p>Was meint ihr?</p>
<p>Greez<br />
Haimi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/280891/welche-konstruktoren-werden-aufgerufen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 23:28:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/280891.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 23 Jan 2011 15:51:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Welche Konstruktoren werden aufgerufen? on Sun, 23 Jan 2011 15:51:30 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe hier eine alte Klausuraugabe bei der ich mir absolut nicht sicher bin.<br />
Gefragt ist, in welcher Zeile Konstruktoren der Klasse &quot;string&quot; aufgerufen werden... und wenn ja, welche:</p>
<p>1: //Programm 1<br />
2: string getline()<br />
3: {<br />
4: char buf[100];<br />
5: gets(buf);<br />
6: String ret = buf;<br />
7: return ret;<br />
8: ;</p>
<p>Meine Vermutung lautet so:<br />
2: Standardkonstruktor, es wird Platz für 100 Buchstaben angelegt.<br />
5: Kopierkonstruktor, die Tastatureingabe wird in den String buf Kopiert<br />
6: Standardkonstruktor: In dem überladenen Zuweisungsoperator von String wird der String reg angelegt, danach wird ihm buf zugewiesen</p>
<p>// Programm2<br />
1: //Programm 1<br />
2: string getline()<br />
3: {<br />
4: char buf[100];<br />
5: gets(buf);<br />
6: return buf;<br />
7: }</p>
<p>Hier würde ich genau dasselbe sagen, nur das hier kein string &quot;ret&quot; angelegt wird... allerdings gehe ich davon aus, dass ich da etwas gehörig übersehe.</p>
<p>Was meint ihr?</p>
<p>Greez<br />
Haimi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010664</guid><dc:creator><![CDATA[Haimi]]></dc:creator><pubDate>Sun, 23 Jan 2011 15:51:30 GMT</pubDate></item><item><title><![CDATA[Reply to Welche Konstruktoren werden aufgerufen? on Sun, 23 Jan 2011 16:09:00 GMT]]></title><description><![CDATA[<p>Bitte benutze [cpp]Code[/cpp].</p>
<pre><code class="language-cpp">string getline()
{
    char buf[100];
    gets(buf);
    string ret = buf;  //Defaultkonstruktor, string::operator=(char*)
    return ret;  //Kopierkonstruktor
}
</code></pre>
<p>ACHTUNG: 100%-ig sicher bin ich mir beim ersten nicht und außerdem darf der Compiler Kopierkonstruktoraufrufe wegoptimieren. Du kannst das also gar nicht genau sagen.</p>
<p>Für das zweite Programm gilt, dass beim return string::string(char <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="😉"
    /> und evtl. noch string::string(string const &amp;) aufgerufen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010669</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sun, 23 Jan 2011 16:09:00 GMT</pubDate></item><item><title><![CDATA[Reply to Welche Konstruktoren werden aufgerufen? on Sun, 23 Jan 2011 16:24:53 GMT]]></title><description><![CDATA[<p>Stimmt, bei der Rückgabe müsste auch einer aufgerufen werden. Vielen Dank schon mal...</p>
<p>Wird bei</p>
<pre><code class="language-cpp">char buf[100]
</code></pre>
<p>kein Konstruktor aufgerufen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010673</guid><dc:creator><![CDATA[Haimi]]></dc:creator><pubDate>Sun, 23 Jan 2011 16:24:53 GMT</pubDate></item><item><title><![CDATA[Reply to Welche Konstruktoren werden aufgerufen? on Sun, 23 Jan 2011 16:26:10 GMT]]></title><description><![CDATA[<p>Nein, wieso? Das ist ein Array von char. (Außer natürlich, wenn du char::char() als eigenständigen Konstruktor ansiehst)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010674</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sun, 23 Jan 2011 16:26:10 GMT</pubDate></item><item><title><![CDATA[Reply to Welche Konstruktoren werden aufgerufen? on Sun, 23 Jan 2011 16:29:00 GMT]]></title><description><![CDATA[<p>wxSkip schrieb:</p>
<blockquote>
<pre><code class="language-cpp">string ret = buf;  //Defaultkonstruktor, string::operator=(char*)
</code></pre>
</blockquote>
<p>Falsch. Hier wird der Konstruktor für const char * aufgerufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010676</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 23 Jan 2011 16:29:00 GMT</pubDate></item><item><title><![CDATA[Reply to Welche Konstruktoren werden aufgerufen? on Sun, 23 Jan 2011 16:29:42 GMT]]></title><description><![CDATA[<p>Haimi schrieb:</p>
<blockquote>
<p>1: //Programm 1<br />
2: string getline()<br />
3: {<br />
4: char buf[100];<br />
5: gets(buf);<br />
6: String ret = buf;<br />
7: return ret;<br />
8: ;</p>
<p>Meine Vermutung lautet so:<br />
2: Standardkonstruktor, es wird Platz für 100 Buchstaben angelegt.</p>
</blockquote>
<p>Nein, das ist ein char-Array und hat nichts mit der String-Klasse std::string zu tun.</p>
<blockquote>
<p>5: Kopierkonstruktor, die Tastatureingabe wird in den String buf Kopiert</p>
</blockquote>
<p>Wiederum nur ein char-Array.</p>
<blockquote>
<p>6: Standardkonstruktor: In dem überladenen Zuweisungsoperator von String wird der String reg angelegt, danach wird ihm buf zugewiesen</p>
</blockquote>
<p>Nein, hier wird der Konstruktor <code>string::string(const char*)</code> aufgerufen, denn</p>
<pre><code class="language-cpp">string ret = buf
</code></pre>
<p>ist dasselbe wie</p>
<pre><code class="language-cpp">string ret(buf)
</code></pre>
<p>, da der genannte Konstruktor nicht als <code>explicit</code> deklariert worden ist.</p>
<p>Zeile 7: Theoretisch der Kopierkonstruktor. Dieser wird aber höchstwahrscheinlich wegoptimiert.</p>
<blockquote>
<p>// Programm2<br />
1: //Programm 1<br />
2: string getline()<br />
3: {<br />
4: char buf[100];<br />
5: gets(buf);<br />
6: return buf;<br />
7: }</p>
</blockquote>
<p>Hier ist ein Aufruf von [c]string::string(const char*)[/cpp] in Zeile 6.</p>
<p>Alle Angaben ohne Gewähr. Denn dem Compiler ist bei solchen Sachen ziemlich freigestellt, wie er es macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010677</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sun, 23 Jan 2011 16:29:42 GMT</pubDate></item><item><title><![CDATA[Reply to Welche Konstruktoren werden aufgerufen? on Sun, 23 Jan 2011 16:34:24 GMT]]></title><description><![CDATA[<p>Danke für die Antworten <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 />
Das werde ich mir noch ausführlich durch den Kopf gehen lassen, ihr habt mir sehr gut weitergeholfen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010682</guid><dc:creator><![CDATA[Haimi]]></dc:creator><pubDate>Sun, 23 Jan 2011 16:34:24 GMT</pubDate></item></channel></rss>