<?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-Ueberladung]]></title><description><![CDATA[<p>Hey,</p>
<p>ich will mal die Operator-Ueberladung ausprobieren.</p>
<p>Dazu habe ich eine Klass MyObj, die erstmal ncihts spezielles kann, außer mit id() die id auszugeben :&gt;</p>
<p>Jetzt will ich einen Funktionskopf erweitern, wo der &lt;&lt; operator so überladen werden soll, dass die id ausgegeben wird.</p>
<pre><code>std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const MyObj&amp; o) {

	return os;
}
</code></pre>
<p>das hab ich jetzt erstmal so gemacht:</p>
<pre><code>std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const MyObj&amp; o) {

	return std::cout&lt;&lt;o.id();
}
</code></pre>
<p>in der main kann ich das ganze jetzt so aufrufen:</p>
<pre><code>MyObj o;
std::cout&lt;&lt;&quot;o: &quot;&lt;&lt;o&lt;&lt;endl;
</code></pre>
<p>funktioniert auch alles wunderbar, ich frag mich nur ob das im sinne der Aufgabe ist. Ich geb ja jetzt nicht wirklich das ostream objekt os zurück oder?</p>
<p>Außerdem finde ich das sowieso relativ verwirrend mit der Operatorüberladung.<br />
Ich könnte es ja z.b. auch so machen:</p>
<pre><code>void MyObj::operator&lt;&lt;(  MyObj&amp; mo){

		cout&lt;&lt;mo.getid()&lt;&lt;endl;
	}
</code></pre>
<p>und iner main</p>
<pre><code>a&lt;&lt;(a);
</code></pre>
<p>ist das beides operatorüberladung?</p>
<p>gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/270065/operator-ueberladung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 17:00:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270065.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 06 Jul 2010 07:55:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operator-Ueberladung on Tue, 06 Jul 2010 07:55:35 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>ich will mal die Operator-Ueberladung ausprobieren.</p>
<p>Dazu habe ich eine Klass MyObj, die erstmal ncihts spezielles kann, außer mit id() die id auszugeben :&gt;</p>
<p>Jetzt will ich einen Funktionskopf erweitern, wo der &lt;&lt; operator so überladen werden soll, dass die id ausgegeben wird.</p>
<pre><code>std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const MyObj&amp; o) {

	return os;
}
</code></pre>
<p>das hab ich jetzt erstmal so gemacht:</p>
<pre><code>std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const MyObj&amp; o) {

	return std::cout&lt;&lt;o.id();
}
</code></pre>
<p>in der main kann ich das ganze jetzt so aufrufen:</p>
<pre><code>MyObj o;
std::cout&lt;&lt;&quot;o: &quot;&lt;&lt;o&lt;&lt;endl;
</code></pre>
<p>funktioniert auch alles wunderbar, ich frag mich nur ob das im sinne der Aufgabe ist. Ich geb ja jetzt nicht wirklich das ostream objekt os zurück oder?</p>
<p>Außerdem finde ich das sowieso relativ verwirrend mit der Operatorüberladung.<br />
Ich könnte es ja z.b. auch so machen:</p>
<pre><code>void MyObj::operator&lt;&lt;(  MyObj&amp; mo){

		cout&lt;&lt;mo.getid()&lt;&lt;endl;
	}
</code></pre>
<p>und iner main</p>
<pre><code>a&lt;&lt;(a);
</code></pre>
<p>ist das beides operatorüberladung?</p>
<p>gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1922060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1922060</guid><dc:creator><![CDATA[Rustyspoon]]></dc:creator><pubDate>Tue, 06 Jul 2010 07:55:35 GMT</pubDate></item><item><title><![CDATA[Reply to Operator-Ueberladung on Tue, 06 Jul 2010 08:05:48 GMT]]></title><description><![CDATA[<p>Wenn du ein stream Objekt übergibst, warum nutzt du das dann nicht?</p>
<pre><code class="language-cpp">std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const MyObj&amp; o) {

    os &lt;&lt; o.id();
    return os;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1922065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1922065</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 06 Jul 2010 08:05:48 GMT</pubDate></item><item><title><![CDATA[Reply to Operator-Ueberladung on Tue, 06 Jul 2010 08:14:07 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Wenn du ein stream Objekt übergibst, warum nutzt du das dann nicht?</p>
<pre><code class="language-cpp">std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const MyObj&amp; o) {
   
    os &lt;&lt; o.id();
    return os;
}
</code></pre>
</blockquote>
<p>hehe, danke!<br />
genau das wollte ich wissen. ich wusste nurnicht, wie ich das streamobjekt nutze <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>was ist mit meienr alternative?<br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1922067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1922067</guid><dc:creator><![CDATA[Rustyspoon]]></dc:creator><pubDate>Tue, 06 Jul 2010 08:14:07 GMT</pubDate></item><item><title><![CDATA[Reply to Operator-Ueberladung on Tue, 06 Jul 2010 08:19:42 GMT]]></title><description><![CDATA[<p>Rustyspoon schrieb:</p>
<blockquote>
<p>ist das beides operatorüberladung?</p>
</blockquote>
<p>Ja, sobald du eine Funktion wie <code>operator&lt;&lt;</code> definierst ist das Operatorüberladung.<br />
Dass deine Funktionen nicht besonders sinnvoll sind, steht auf einem anderen Blatt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1922070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1922070</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 06 Jul 2010 08:19:42 GMT</pubDate></item><item><title><![CDATA[Reply to Operator-Ueberladung on Tue, 06 Jul 2010 08:28:19 GMT]]></title><description><![CDATA[<p>ja keine Frage. aber mir geht es nur darum wenn operatorüberladung gewünscht ist operatorüberladung zu zeigen. ich würd sowas wie operatprüberladung nei wirklich anwenden. wenn ich zwei objekte adieren will überade ich net den + operator sondern man ne methode .add ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1922074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1922074</guid><dc:creator><![CDATA[Rustyspoon]]></dc:creator><pubDate>Tue, 06 Jul 2010 08:28:19 GMT</pubDate></item><item><title><![CDATA[Reply to Operator-Ueberladung on Tue, 06 Jul 2010 09:08:11 GMT]]></title><description><![CDATA[<p>Rustyspoon schrieb:</p>
<blockquote>
<p>ja keine Frage. aber mir geht es nur darum wenn operatorüberladung gewünscht ist operatorüberladung zu zeigen. ich würd sowas wie operatprüberladung nei wirklich anwenden. wenn ich zwei objekte adieren will überade ich net den + operator sondern man ne methode .add ^^</p>
</blockquote>
<p>Warum? Operatorüberladung ist eine ganz tolle Sache. Lass dich nicht von der komplizierten Begrifflichkeit abschrecken. Überladene Operatoren sind Funktionen wie jede andere auch. Du würdest quasi nur das Wort add durch operator+ ersetzen und schon hast du einen überladenen Operator.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1922100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1922100</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 06 Jul 2010 09:08:11 GMT</pubDate></item><item><title><![CDATA[Reply to Operator-Ueberladung on Tue, 06 Jul 2010 10:12:03 GMT]]></title><description><![CDATA[<p>Rustyspoon schrieb:</p>
<blockquote>
<p>ich würd sowas wie operatprüberladung nei wirklich anwenden. wenn ich zwei objekte adieren will überade ich net den + operator sondern man ne methode .add ^^</p>
</blockquote>
<pre><code class="language-cpp">MyInt a, b, c, d;

d = (a+b)*c + (a+c)*b + a*b + b*c;
// vs
d = a.add(b).mul(c).add(a.add(c).mul(b)).add(a.mul(b)).add(b.mul(c));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1922134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1922134</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Tue, 06 Jul 2010 10:12:03 GMT</pubDate></item><item><title><![CDATA[Reply to Operator-Ueberladung on Tue, 06 Jul 2010 13:25:15 GMT]]></title><description><![CDATA[<p>Rustyspoon schrieb:</p>
<blockquote>
<p>ich würd sowas wie operatprüberladung nei wirklich anwenden. wenn ich zwei objekte adieren will überade ich net den + operator sondern man ne methode .add ^^</p>
</blockquote>
<p>Damit sträubst du dich gegen C++.</p>
<pre><code class="language-cpp">int                  i = (a+b) * c;
float                i = (a+b) * c;
std::complex&lt;double&gt; i = (a+b) * c;
MyInt                i = (a.add(b)).mul(c);
</code></pre>
<p>Und die Inkonsistenz ist durchaus nicht nur Geschmackssache.</p>
<pre><code class="language-cpp">std::vector&lt;T&gt; vec;
...
std::accumulate(vec.begin(), vec.end(), 0);
// geht für T == int, float, std::complex, aber nicht für deinen MyInt.
</code></pre>
<p>Vom Hindernis für Generizität abgesehen hat dein Ansatz weitere Probleme.</p>
<pre><code class="language-cpp">MyInt GetDouble(MyInt value);
int GetDouble(int value);

MyInt a = 7;
int b = 5;

GetDouble(a).add(b); // ok
GetDouble(a).add(a); // ok
GetDouble(b).add(a); // nicht ok!
GetDouble(b).add(a); // nicht ok!
</code></pre>
<p>Daher wenn schon freie Funktionen anbieten, um Konvertierungen des linken Operanden zu erlauben. Bei Verwendung von Operatorüberladung ist das ein Muss, wiel sonst (mit Memberfunktionen) schon dieser Code Probleme verursacht:</p>
<pre><code class="language-cpp">a + b; // ok
a + a; // ok
b + b; // ok
b + a; // nicht ok!
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1922242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1922242</guid><dc:creator><![CDATA[Dustymoon]]></dc:creator><pubDate>Tue, 06 Jul 2010 13:25:15 GMT</pubDate></item></channel></rss>