<?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[Operator Überladung]]></title><description><![CDATA[<p>Hallo</p>
<p><em>string_klasse.h</em></p>
<pre><code class="language-cpp">class String {
private:
	char *buffer;
	unsigned len;
public:
	// Deklaration der Methoden(Fähigkeiten) von String

	// Zugriffsmethode 
	char *get_String() const;

	// Operator Überladung
	String operator+=(const String &amp;str1);
};
</code></pre>
<p><em>string_klasse.cpp</em></p>
<pre><code class="language-cpp">// Definition der Methoden(Fähigkeiten) von String

// Zugriffsmethode
char *String::get_String() const { return buffer; }

// Operator Überladung
String String::operator+=(const String &amp;str1) {
	// tmp gleich mit aktuellen Objekt initialisieren
	String tmp(*this);

	// Aktuelles Objekt löschen
	delete [] buffer;

	// Gesamtlänge beider Objekte ermitteln
	len = tmp.len + str1.len;

	// Speicher reservieren
	buffer = new char[len]+1;

	// linker Operand in buffer kopieren
	strcpy(buffer, tmp.buffer);

	// rechten Operand anhängen
	strcat(buffer, str1.buffer);

	// Zurück und fertig
	return buffer;
}
</code></pre>
<p><em>main.cpp</em></p>
<pre><code class="language-cpp">String str(&quot;Adam&quot;);

	str += &quot; und Eva&quot;;

	cout &lt;&lt; str.get_String();
</code></pre>
<p><em>zum Problem</em><br />
Schaut bitte mal auf den main.cpp Abschnitt. Ich möchte gerne an den Text Adam mit dem neuen überladenen Operator &quot;+=&quot; den Text &quot; und Eva&quot; anhängen.</p>
<p>Die Ausgabe stimmt soweit. Allerdings kommt auch ein Fehler, den ich als JPG Bild festgehalten habe. Wie ist dieser zu beheben?</p>
<p><a href="http://home.tiscali.de/myflash/operator_ueberladen.JPG" rel="nofollow">http://home.tiscali.de/myflash/operator_ueberladen.JPG</a></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/196260/operator-überladung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 10:07:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/196260.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 27 Oct 2007 14:23:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operator Überladung on Sat, 27 Oct 2007 14:23:55 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p><em>string_klasse.h</em></p>
<pre><code class="language-cpp">class String {
private:
	char *buffer;
	unsigned len;
public:
	// Deklaration der Methoden(Fähigkeiten) von String

	// Zugriffsmethode 
	char *get_String() const;

	// Operator Überladung
	String operator+=(const String &amp;str1);
};
</code></pre>
<p><em>string_klasse.cpp</em></p>
<pre><code class="language-cpp">// Definition der Methoden(Fähigkeiten) von String

// Zugriffsmethode
char *String::get_String() const { return buffer; }

// Operator Überladung
String String::operator+=(const String &amp;str1) {
	// tmp gleich mit aktuellen Objekt initialisieren
	String tmp(*this);

	// Aktuelles Objekt löschen
	delete [] buffer;

	// Gesamtlänge beider Objekte ermitteln
	len = tmp.len + str1.len;

	// Speicher reservieren
	buffer = new char[len]+1;

	// linker Operand in buffer kopieren
	strcpy(buffer, tmp.buffer);

	// rechten Operand anhängen
	strcat(buffer, str1.buffer);

	// Zurück und fertig
	return buffer;
}
</code></pre>
<p><em>main.cpp</em></p>
<pre><code class="language-cpp">String str(&quot;Adam&quot;);

	str += &quot; und Eva&quot;;

	cout &lt;&lt; str.get_String();
</code></pre>
<p><em>zum Problem</em><br />
Schaut bitte mal auf den main.cpp Abschnitt. Ich möchte gerne an den Text Adam mit dem neuen überladenen Operator &quot;+=&quot; den Text &quot; und Eva&quot; anhängen.</p>
<p>Die Ausgabe stimmt soweit. Allerdings kommt auch ein Fehler, den ich als JPG Bild festgehalten habe. Wie ist dieser zu beheben?</p>
<p><a href="http://home.tiscali.de/myflash/operator_ueberladen.JPG" rel="nofollow">http://home.tiscali.de/myflash/operator_ueberladen.JPG</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1393066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1393066</guid><dc:creator><![CDATA[#smY]]></dc:creator><pubDate>Sat, 27 Oct 2007 14:23:55 GMT</pubDate></item><item><title><![CDATA[Reply to Operator Überladung on Sat, 27 Oct 2007 14:41:24 GMT]]></title><description><![CDATA[<p>delete[] buffer ist falsch. sorry, atm keine zeit für genauere Antwort... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1393077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1393077</guid><dc:creator><![CDATA[Antwort]]></dc:creator><pubDate>Sat, 27 Oct 2007 14:41:24 GMT</pubDate></item><item><title><![CDATA[Reply to Operator Überladung on Sun, 28 Oct 2007 11:50:55 GMT]]></title><description><![CDATA[<pre><code>// Speicher reservieren
buffer = new char[len]+1;
</code></pre>
<p>Laut meinem C++ Buch ist die obige Zeile total in Ordnung.</p>
<p>Wenn man das so umschreibt</p>
<pre><code>// Speicher reservieren
buffer = new char[len+1];
</code></pre>
<p>klappts ohne Fehlermeldung. Das scheint wohl der Fehler zu sein.</p>
<p>Trotzdem danke.</p>
<p>MfG<br />
#smY</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1393521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1393521</guid><dc:creator><![CDATA[#smY]]></dc:creator><pubDate>Sun, 28 Oct 2007 11:50:55 GMT</pubDate></item><item><title><![CDATA[Reply to Operator Überladung on Sun, 28 Oct 2007 12:21:21 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/1393541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1393541</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Sun, 28 Oct 2007 12:21:21 GMT</pubDate></item><item><title><![CDATA[Reply to Operator Überladung on Mon, 29 Oct 2007 14:01:51 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;typename T&gt;
class basic_string 
{
    T* m_data;
    std::size_t m_length;

public:
    basic_string(const char* str) : m_length(std::strlen(str)) { m_data = new T[m_length + 1]; std::strcpy(m_data, str); }
    basic_string() : m_length(0) { m_data = new T[m_length + 1]; m_data[0] = 0;
    basic_string(basic_string const&amp; rhs) : m_length(rhs.m_length) { m_data = new T[m_length + 1]; std::strcpy(m_data, rhs.m_data); }
    basic_string&amp; operator=(basic_string const&amp; rhs) { m_length = rhs.m_length; m_data = new T[m_length + 1]; std::strcpy(m_data, rhs.m_data); return *this; }
    ~basic_string() { delete [] m_data }

public:
    const char* c_str() const { return m_data; }
    std::size_t length() const { return m_length; }

public:
    friend std::ostream&amp; operator &lt;&lt;(std::ostream&amp; out, basic_string&lt;T&gt; const&amp; data) { out &lt;&lt; data.m_data; return out; }

    basic_string operator += (basic_string const&amp; rhs);
};
</code></pre>
<p>also get_string sollte schon einen const char zurück geben ... sonnst kann es dir passieren das len nachher nichtmehr stimmt! (falls jemand was an deinem String dann verändert)</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
    std::cout &lt;&lt; basic_string&lt;char&gt;(&quot;Hallo Welt!&quot;) &lt;&lt; std::endl;
}
</code></pre>
<p><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><strong>Bearbeitung</strong><br />
Hab dir mal kurz die großen 3 reingepackt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1393666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1393666</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Mon, 29 Oct 2007 14:01:51 GMT</pubDate></item><item><title><![CDATA[Reply to Operator Überladung on Mon, 29 Oct 2007 08:00:52 GMT]]></title><description><![CDATA[<p>#smY schrieb:</p>
<blockquote>
<pre><code>// Speicher reservieren
buffer = new char[len]+1;
</code></pre>
<p>Laut meinem C++ Buch ist die obige Zeile total in Ordnung.</p>
</blockquote>
<p>syntaktisch ist die in Ordnung, technisch nicht. Du unterschlägst erstens den Platz für den Null-Terminator und überpringst zweitens das erste Byte des angeforderten Speicherbereiches.</p>
<p>PS: Ich hoffe für dich, deine String-Klasse hat die &quot;großen drei&quot; implementiert (Copy-Ctor, op= und Dtor)</p>
<p>PPS: Was spricht dagegen, std::string zu verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1393934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1393934</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 29 Oct 2007 08:00:52 GMT</pubDate></item></channel></rss>