<?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[was macht dieser verdammte code??]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche mir gerade grundlegende kenntnisse in sachen oop anzueignen. in einem buch bin ich auf diesen code gestoßen:</p>
<pre><code class="language-cpp">class Name
{
    string* m_name;

  public:
    Name() {}

    Name(const Name&amp; n)
      : m_name(new string(*n.m_name))
      {}

    Name (const char*s)
      : m_name(new string((s)?s:&quot;&quot;))
      {}

    ~Name()
      {
      delete(m_name);
      }

    const char* c_str()
      {
      return (m_name-&gt;c_str());
      }
};
</code></pre>
<p>Was passiert beim aufruf der Methode c_str()???<br />
also dass sie m_name zurückgibt weiß ich, aber ich weiß nicht was passiert und warum das programm das macht. kann mir das jemand erklären?</p>
<p>warum schreibt man nicht einfach</p>
<pre><code class="language-cpp">const char* c_str()
      {
      return (m_name);
      }
</code></pre>
<p>??<br />
LG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/175878/was-macht-dieser-verdammte-code</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 10:18:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/175878.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Mar 2007 22:33:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to was macht dieser verdammte code?? on Wed, 14 Mar 2007 22:35:50 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche mir gerade grundlegende kenntnisse in sachen oop anzueignen. in einem buch bin ich auf diesen code gestoßen:</p>
<pre><code class="language-cpp">class Name
{
    string* m_name;

  public:
    Name() {}

    Name(const Name&amp; n)
      : m_name(new string(*n.m_name))
      {}

    Name (const char*s)
      : m_name(new string((s)?s:&quot;&quot;))
      {}

    ~Name()
      {
      delete(m_name);
      }

    const char* c_str()
      {
      return (m_name-&gt;c_str());
      }
};
</code></pre>
<p>Was passiert beim aufruf der Methode c_str()???<br />
also dass sie m_name zurückgibt weiß ich, aber ich weiß nicht was passiert und warum das programm das macht. kann mir das jemand erklären?</p>
<p>warum schreibt man nicht einfach</p>
<pre><code class="language-cpp">const char* c_str()
      {
      return (m_name);
      }
</code></pre>
<p>??<br />
LG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245805</guid><dc:creator><![CDATA[rabatz]]></dc:creator><pubDate>Wed, 14 Mar 2007 22:35:50 GMT</pubDate></item><item><title><![CDATA[Reply to was macht dieser verdammte code?? on Wed, 14 Mar 2007 22:45:34 GMT]]></title><description><![CDATA[<p>Weil die Methode laut Deklaration einen char Pointer zurückgibt und keinen string Pointer.</p>
<p>Die Klasse std::string hat eine Member Funktion c_str(). Die gibt einen Pointer auf den Inhalt als char Pointer zurück.</p>
<p>Sonst müsstest du es so schreiben:</p>
<pre><code class="language-cpp">const string* c_str()
      {
      return (m_name);
      }
</code></pre>
<p>Würde man aber nicht so machen, weil der Name c_str() impliziert, dass ein char * zurückgegeben wird. Der Name wäre unpassend.</p>
<p>Ich finde die Klasse Name etwas komisch, weil es meiner Meinung nach wenig Sinn macht die Membervariable zur Laufzeit mit new zu erzeugen. Man könnte auch einfach</p>
<pre><code class="language-cpp">string m_name;
</code></pre>
<p>als Membervar nehmen und sich das Pointergewürge ersparen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245806</guid><dc:creator><![CDATA[Die_Gute_Fee]]></dc:creator><pubDate>Wed, 14 Mar 2007 22:45:34 GMT</pubDate></item><item><title><![CDATA[Reply to was macht dieser verdammte code?? on Wed, 14 Mar 2007 22:52:33 GMT]]></title><description><![CDATA[<p>aaahhhh jetzt dämmerts. ich dachte nämlich immer die methode ruft sich irgendwie rekursiv auf aber das ist ja blödsinn.</p>
<p>danke jedenfalls <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>und wegen den pointern da hab ich eh gesagt ich hab das beispiel 1:1 aus einem buch</p>
<p>LG und danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245807</guid><dc:creator><![CDATA[rabatz]]></dc:creator><pubDate>Wed, 14 Mar 2007 22:52:33 GMT</pubDate></item><item><title><![CDATA[Reply to was macht dieser verdammte code?? on Thu, 15 Mar 2007 09:51:27 GMT]]></title><description><![CDATA[<p>rabatz schrieb:</p>
<blockquote>
<p>...<br />
und wegen den pointern da hab ich eh gesagt ich hab das beispiel 1:1 aus einem buch</p>
<p>LG und danke</p>
</blockquote>
<p>Hi,</p>
<p>ist das wenigstens aus einem Kapitel, das einem speziell Zeiger beibringen will ?<br />
Ansonsten würde ich definitv das Buch wechseln. <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="😉"
    /><br />
Wenn Du gerade am Anfang stehst, sind Pointer (und &quot;Heapzeug&quot;) sowieso nicht das Passende....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245928</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 15 Mar 2007 09:51:27 GMT</pubDate></item></channel></rss>