<?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[[gelöst] Operator (+ und -) mit 2 Parametern überladen]]></title><description><![CDATA[<p>Hallo Leute!</p>
<p>Ich kenne mich nich wirklich mit C++ aus aber schreibe gerade an einem Programm für die Hochschule.</p>
<p>Jedenfalls würde ich in dem Zuge gerne Operatoren, nämlich + und - mit zwei Parametern überladen. Laut meinem Buch sollte das auch gehen.</p>
<p>Also ich stelle mir quasi sowas vor:</p>
<pre><code class="language-cpp">CVierpolA operator +(CVierpolA VierpolA1, CVierpolA VierpolA2);
</code></pre>
<p>sodass ich dann schreiben kann:</p>
<pre><code class="language-cpp">VierpolA=VierpolA1+VierpolA2
</code></pre>
<p>und er aber quasi das hier macht:</p>
<pre><code class="language-cpp">CVierpolA CVierpolA::operator +(CVierpolA VierpolA1, CVierpolA VierpolA2)
{
	CVierpolA Merker;

	Merker.Element11 = VierpolA1.readElement11()+VierpolA2.readElement11();
	Merker.Element11 = VierpolA1.readElement11()+VierpolA2.readElement11();
	Merker.Element11 = VierpolA1.readElement11()+VierpolA2.readElement11();
	Merker.Element11 = VierpolA1.readElement11()+VierpolA2.readElement11();

	return Merker;

}
</code></pre>
<p>was laut meinem Buch ganz einfach scheint, verursacht bei mir aber diese Fehlermeldung:<br />
error C2804: Binärer Operator '+' hat zu viele Parameter</p>
<p>Kann man das doch irgendwie hinkriegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/269565/gelöst-operator-und-mit-2-parametern-überladen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 02:30:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/269565.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 27 Jun 2010 17:25:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst] Operator (+ und -) mit 2 Parametern überladen on Sun, 27 Jun 2010 18:06:26 GMT]]></title><description><![CDATA[<p>Hallo Leute!</p>
<p>Ich kenne mich nich wirklich mit C++ aus aber schreibe gerade an einem Programm für die Hochschule.</p>
<p>Jedenfalls würde ich in dem Zuge gerne Operatoren, nämlich + und - mit zwei Parametern überladen. Laut meinem Buch sollte das auch gehen.</p>
<p>Also ich stelle mir quasi sowas vor:</p>
<pre><code class="language-cpp">CVierpolA operator +(CVierpolA VierpolA1, CVierpolA VierpolA2);
</code></pre>
<p>sodass ich dann schreiben kann:</p>
<pre><code class="language-cpp">VierpolA=VierpolA1+VierpolA2
</code></pre>
<p>und er aber quasi das hier macht:</p>
<pre><code class="language-cpp">CVierpolA CVierpolA::operator +(CVierpolA VierpolA1, CVierpolA VierpolA2)
{
	CVierpolA Merker;

	Merker.Element11 = VierpolA1.readElement11()+VierpolA2.readElement11();
	Merker.Element11 = VierpolA1.readElement11()+VierpolA2.readElement11();
	Merker.Element11 = VierpolA1.readElement11()+VierpolA2.readElement11();
	Merker.Element11 = VierpolA1.readElement11()+VierpolA2.readElement11();

	return Merker;

}
</code></pre>
<p>was laut meinem Buch ganz einfach scheint, verursacht bei mir aber diese Fehlermeldung:<br />
error C2804: Binärer Operator '+' hat zu viele Parameter</p>
<p>Kann man das doch irgendwie hinkriegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918010</guid><dc:creator><![CDATA[Lactic_Doug]]></dc:creator><pubDate>Sun, 27 Jun 2010 18:06:26 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Operator (+ und -) mit 2 Parametern überladen on Sun, 27 Jun 2010 17:37:30 GMT]]></title><description><![CDATA[<p>Ja, Operatoren ausserhalb der Klasse überladen. Zudem Referenzen auf konstante Objekte statt Kopien übergeben.</p>
<pre><code class="language-cpp">VierpolA operator+ (const VierpolA&amp; lhs, const VierpolA&amp; rhs);
// lhs = left hand side (linker Operand)
// rhs = right hand side (rechter Operand)
// (das ist eine übliche Konvention, du kannst die Variablen auch anders nennen)
</code></pre>
<p>Üblich ist es, dass der <code>operator+=</code> innerhalb der Klasse überladen und dann vom globalen <code>operator+</code> aufgerufen wird. Best-Practices und Tipps zur Operatorüberladung findest du <a href="http://magazin.c-plusplus.net/artikel/%DCberladung%20von%20Operatoren%20in%20CPlusPlus%20%28Teil%201%29" rel="nofollow">in diesem Artikel</a>.</p>
<p>Übrigens: &quot;C&quot; vor dem Typ &quot;VierpolA&quot; ist unnötig und führt in C++ einige Probleme mit sich, ohne tatsächlichen Mehrwert zu bieten (Argumente gegen UN siehe z.B. <a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1773551.html#1773551" rel="nofollow">hier</a>).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918016</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 27 Jun 2010 17:37:30 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Operator (+ und -) mit 2 Parametern überladen on Sun, 27 Jun 2010 17:47:30 GMT]]></title><description><![CDATA[<p>Zu allererst mal vielen Dank für die schnelle Antwort.</p>
<p>So zu der ungarischen Notation... da ist mein Prof ein Fan von, deswegen mach ich die lieber rein.</p>
<p>Jetzt hab ich deinen Ansatz probiert, bekomme allerdings noch die gleiche Fehlermeldung.</p>
<p>Fragen die sich mir stellen sind:<br />
Was verändert das &quot;const&quot;?<br />
Muss das &quot;&amp;&quot; stehen?<br />
Und wenn du meinst das Überladen soll ich außerhalb der Klasse machen, meinst du dann, dass ich die Klasse in nem Header erzeuge und aber die Operatoren-Überladungs sache in nem cpp file mache in das ich das Header einfüge? weil wenn ja , dann hab ich das schon so gemacht.</p>
<p>Sry wenn es sehr komische Fragen sind, aber ich bin wirklich noch Anfänger <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/1918024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918024</guid><dc:creator><![CDATA[Lactic_Doug]]></dc:creator><pubDate>Sun, 27 Jun 2010 17:47:30 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Operator (+ und -) mit 2 Parametern überladen on Sun, 27 Jun 2010 17:53:19 GMT]]></title><description><![CDATA[<p>Lactic_Doug schrieb:</p>
<blockquote>
<p>So zu der ungarischen Notation... da ist mein Prof ein Fan von, deswegen mach ich die lieber rein.</p>
</blockquote>
<p>Okay, aber behalte dir im Hinterkopf, dass es bessere Möglichkeiten gibt... <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>Lactic_Doug schrieb:</p>
<blockquote>
<p>Was verändert das &quot;const&quot;?<br />
Muss das &quot;&amp;&quot; stehen?</p>
</blockquote>
<p><code>const</code> gibt Auskunft darüber, ob eine Variable verändert werden darf. Das &amp; bezeichnet eine Referenz. Aber solche Dinge solltet ihr eigentlich lernen, das sind C++-Grundlagen. Und zwar <strong>viel</strong> grundlegender als beispielsweise Operatorüberladung.</p>
<p>Lactic_Doug schrieb:</p>
<blockquote>
<p>Und wenn du meinst das Überladen soll ich außerhalb der Klasse machen, meinst du dann, dass ich die Klasse in nem Header erzeuge und aber die Operatoren-Überladungs sache in nem cpp file mache in das ich das Header einfüge?</p>
</blockquote>
<p>Nein, ich meine einfach eine globale Funktion namens <code>operator+</code> . Also keine Memberfunktion.</p>
<pre><code class="language-cpp">class VierpolA
{
    // innerhalb der Klasse
};

// ausserhalb
VierpolA operator+ (const VierpolA&amp; lhs, const VierpolA&amp; rhs);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1918031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918031</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 27 Jun 2010 17:53:19 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Operator (+ und -) mit 2 Parametern überladen on Sun, 27 Jun 2010 17:57:03 GMT]]></title><description><![CDATA[<p>Lactic_Doug schrieb:</p>
<blockquote>
<p>Sry wenn es sehr komische Fragen sind, aber ich bin wirklich noch Anfänger <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>
</blockquote>
<p>Falls du noch kein Buch hast kann ich dir den <a href="http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326973" rel="nofollow">C++ Primer Plus</a> empfehlen. Ist ein sehr gutes Buch, das einem die Grundlagen sehr gut erklärt. Einfach mal gemütlich durcharbeiten, denn es ist sehr wichtig, dass man die Grundlagen gut versteht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918034</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sun, 27 Jun 2010 17:57:03 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Operator (+ und -) mit 2 Parametern überladen on Sun, 27 Jun 2010 17:58:45 GMT]]></title><description><![CDATA[<p>AAAH ok vielen vielen Dank!!<br />
Jetzt funktioniert es!</p>
<blockquote>
<p>Aber solche Dinge solltet ihr eigentlich lernen, das sind C++-Grundlagen. Und zwar viel grundlegender als beispielsweise Operatorüberladung.</p>
</blockquote>
<p>Jup das stimmt, hatten wir bestimmt auch mal dran, aber der Prof kann meiner Meinung nach kein Wissen vermitteln. Aus den Vorlesungen nehme ich meistens sehr wenig mit. Aber Danke für erklären.</p>
<p>Super das freut mich jetzt dass das möglich ist.<br />
Dann werde ich mal weiter programmieren.</p>
<p>Vielen Dank nochmal!</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22908">@icarus2</a>: danke für den Tip, da werde ich mir das mal besorgen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918035</guid><dc:creator><![CDATA[Lactic_Doug]]></dc:creator><pubDate>Sun, 27 Jun 2010 17:58:45 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Operator (+ und -) mit 2 Parametern überladen on Sun, 27 Jun 2010 18:06:20 GMT]]></title><description><![CDATA[<p>Muss die dann aber nicht ein friend von VierpolA sein? Zumindest hab ich das so gelernt, das man Operatoren, wenn schon außerhalb, dann als friend o.ä deklariert, damit man dann entsprechend auf die Privaten Funktionen und Typen innerhalb der operator Funktion zugreifen kann oder sollte man das ganze sowieso lieber irgendwie in public Funktionen wrappen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918045</guid><dc:creator><![CDATA[Blackskyliner]]></dc:creator><pubDate>Sun, 27 Jun 2010 18:06:20 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Operator (+ und -) mit 2 Parametern überladen on Sun, 27 Jun 2010 18:08:29 GMT]]></title><description><![CDATA[<p>Super dass du es sagst, das Problem hab ich nämlich gerade <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>Da will ich auf meine protected Attribute zugreifen, aber das geht dann natürlich nicht, das mit dem als friend machen, ist keine schlechte Idee, das werde ich direkt mal ausprobieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918048</guid><dc:creator><![CDATA[Lactic_Doug]]></dc:creator><pubDate>Sun, 27 Jun 2010 18:08:29 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Operator (+ und -) mit 2 Parametern überladen on Sun, 27 Jun 2010 18:13:19 GMT]]></title><description><![CDATA[<p>Lactic_Doug schrieb:</p>
<blockquote>
<p>das mit dem als friend machen, ist keine schlechte Idee, das werde ich direkt mal ausprobieren.</p>
</blockquote>
<p>Doch, das ist eine schlechte Idee. <code>friend</code> solltest du mit Bedacht einsetzen. Da es oft die Kapselung verletzt, ist es nur manchmal dein Freund. <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>Wie schon angedeutet kann man das Problem sehr elegant lösen, indem man einen Member-Operator <code>+=</code> und einen globalen <code>+</code> anbietet. Es ist ohnehin nur intuitiv, dass die beiden folgenden Ausdrücke kompilieren und semantisch äquivalent sind.</p>
<pre><code class="language-cpp">a = a + b;
a += b;
</code></pre>
<p>Genaueres steht im bereits verlinkten Artikel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918056</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 27 Jun 2010 18:13:19 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Operator (+ und -) mit 2 Parametern überladen on Sun, 27 Jun 2010 18:27:00 GMT]]></title><description><![CDATA[<p>Jo das verstehe ich schon, nur ist in meiner Aufgabenstellung ausdrücklich gefordert, dass der Operator + genutzt werden soll. Und das bringt mir auch mehr da so meine Ausgabe später einfacher wird, weil ich ja dann mehrere Vierpole speichern kann die durch Addition in eine Kettenschaltung übergehen.</p>
<p>Nun würde ich das trotz der Gefahr die Kapselung zu verletzen (was aber meiner Meinung nach in meinem speziellen Fall nicht passieren sollte) aber gerne doch als friend deklarieren.</p>
<p>Allerdings stoße ich da schonwieder auf Probleme weil da ja nicht außerhalb der Klasse möglich ist.</p>
<p>Wie kann ich also die Operandenüberladung als friend von VierpolA anlegen? Geht das denn dann überhaupt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918066</guid><dc:creator><![CDATA[Lactic_Doug]]></dc:creator><pubDate>Sun, 27 Jun 2010 18:27:00 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Operator (+ und -) mit 2 Parametern überladen on Sun, 27 Jun 2010 18:29:57 GMT]]></title><description><![CDATA[<p>Wieder was dazu gelernt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Wo ich letztens nach solchen Themen gefragt hatte, wurde ich nicht auf dieses wirklich gute Tutorial hingewiesen.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/24125">@Lactic_Doug</a>:<br />
Doch, mach es als += und dann ruft + einfach nur += auf, egal wie das in der Aufgabenstellung gefordert zu sein scheint, ist dies eine &quot;legale&quot; Lösung des Problems und zeigt das du dich damit auseinander gesetzt hast.</p>
<p>Ansonsten:</p>
<pre><code class="language-cpp">class VierpolA 
{ 
    // innerhalb der Klasse 
    friend VierpolA operator+ (const VierpolA&amp;, const VierpolA&amp;);
}; 

// ausserhalb 
VierpolA operator+ (const VierpolA&amp; lhs, const VierpolA&amp; rhs)
</code></pre>
<p>Edit:<br />
Ist schon traurig, wie viele Dozenten, Professoren, what ever den Standard nicht lehren oder gar beachten, ich weise in der Vorlesung immer wieder den Professor auf diverse Abweichungen zum Standard hin, die dann immer damit abgetan werden mit naja man kann muss aber nicht o.ä. Oder man bekommt keine richtigen Antwort... bei einer Vorlesung hab ich mich 4 mal geäußert und bin dann aufgrund einer eher agressiven Haltung bei der letzten Feststellung, entsprechend ruhig gewesen.....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918068</guid><dc:creator><![CDATA[Blackskyliner]]></dc:creator><pubDate>Sun, 27 Jun 2010 18:29:57 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Operator (+ und -) mit 2 Parametern überladen on Sun, 27 Jun 2010 18:31:15 GMT]]></title><description><![CDATA[<p>Lactic_Doug schrieb:</p>
<blockquote>
<p>Jo das verstehe ich schon, nur ist in meiner Aufgabenstellung ausdrücklich gefordert, dass der Operator + genutzt werden soll. Und das bringt mir auch mehr da so meine Ausgabe später einfacher wird, weil ich ja dann mehrere Vierpole speichern kann die durch Addition in eine Kettenschaltung übergehen.</p>
</blockquote>
<p>Du stellst eben beide Operatoren zur Verfügung. Operatorüberladung muss intuitiv sein, und ein <code>+</code> ohne zugehöriges <code>+=</code> sorgt für Verwirrung.</p>
<p>Lactic_Doug schrieb:</p>
<blockquote>
<p>Nun würde ich das trotz der Gefahr die Kapselung zu verletzen (was aber meiner Meinung nach in meinem speziellen Fall nicht passieren sollte) aber gerne doch als friend deklarieren.</p>
</blockquote>
<p>Inwiefern ist dein Fall speziell? Der <code>operator+</code> will auf <code>private</code> / <code>protected</code> -Details zugreifen, was gerechtfertigterweise einen Compilerfehler verursacht. Nur um diesen Compilerfehler zu beheben, willst du nun <code>friend</code> einsetzen, obwohl das Problem woanders liegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918070</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 27 Jun 2010 18:31:15 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Operator (+ und -) mit 2 Parametern überladen on Sun, 27 Jun 2010 18:31:06 GMT]]></title><description><![CDATA[<p>Ah ok, sry das war ein Denkfehler meinerseits. Alles klar dann verwende ich +=.</p>
<p>Vielen Dank an alle beteiligten Helfer <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/1918073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918073</guid><dc:creator><![CDATA[Lactic_Doug]]></dc:creator><pubDate>Sun, 27 Jun 2010 18:31:06 GMT</pubDate></item></channel></rss>