<?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 überladen]]></title><description><![CDATA[<p>Hallo, ich bin c++ Anfänger und verschaffe mir gerade einen überblick in das Themengebiet der Klassen bzw Operatoren überladen. Es ist ne ganz einfache und dumme Frage, ich brings trotzdem irgendwie nicht so zu Stande, sodass ich es jetzt wage hier zu fragen. WIE binde ich genau eine Operator überladende Methode in den rest ein??<br />
Ich hab eine datei a.h:</p>
<pre><code>class box {

    int ecent; 

public:
    box(int ecent=0);
};
</code></pre>
<p>--------------<br />
Dann die datei die das einbindet:</p>
<pre><code>#include &quot;a.h&quot;
#include &lt;iostream&gt;
using namespace std;

box::box(int ecent){
    this-&gt;ecent=ecent;
}
</code></pre>
<p>und die main.. Ausschnitte zumindest aus allem immer, läuft auch alles super. Ich möchte aber nun einen Operator überladen.</p>
<pre><code>#include &lt;iostream&gt;
#include &quot;a.cpp&quot;
using namespace std;

main () {

  box a=5,b=2;

  return 0;
}
</code></pre>
<p>--------------<br />
Angenommen möchte ich den Inhalt beider zusammenzählen.<br />
also in die main:</p>
<pre><code>cout &lt;&lt; a+b;
</code></pre>
<p>in die a.cpp</p>
<pre><code>int box::box operator+(box p){
  return a.ecent+b.ecent;
}
</code></pre>
<p>oder wie genau? was schreibe ich in die a.h Datei um das ganze zu verlinken bzw wie richtig (da das sicherlich falsch ist), um das dann auch aufzunehmen? Wäre über ne Antwort sehr sehr sehr dankbar!!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/322753/operator-überladen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 16:43:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/322753.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 05 Jan 2014 17:09:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operator überladen on Sun, 05 Jan 2014 17:09:17 GMT]]></title><description><![CDATA[<p>Hallo, ich bin c++ Anfänger und verschaffe mir gerade einen überblick in das Themengebiet der Klassen bzw Operatoren überladen. Es ist ne ganz einfache und dumme Frage, ich brings trotzdem irgendwie nicht so zu Stande, sodass ich es jetzt wage hier zu fragen. WIE binde ich genau eine Operator überladende Methode in den rest ein??<br />
Ich hab eine datei a.h:</p>
<pre><code>class box {

    int ecent; 

public:
    box(int ecent=0);
};
</code></pre>
<p>--------------<br />
Dann die datei die das einbindet:</p>
<pre><code>#include &quot;a.h&quot;
#include &lt;iostream&gt;
using namespace std;

box::box(int ecent){
    this-&gt;ecent=ecent;
}
</code></pre>
<p>und die main.. Ausschnitte zumindest aus allem immer, läuft auch alles super. Ich möchte aber nun einen Operator überladen.</p>
<pre><code>#include &lt;iostream&gt;
#include &quot;a.cpp&quot;
using namespace std;

main () {

  box a=5,b=2;

  return 0;
}
</code></pre>
<p>--------------<br />
Angenommen möchte ich den Inhalt beider zusammenzählen.<br />
also in die main:</p>
<pre><code>cout &lt;&lt; a+b;
</code></pre>
<p>in die a.cpp</p>
<pre><code>int box::box operator+(box p){
  return a.ecent+b.ecent;
}
</code></pre>
<p>oder wie genau? was schreibe ich in die a.h Datei um das ganze zu verlinken bzw wie richtig (da das sicherlich falsch ist), um das dann auch aufzunehmen? Wäre über ne Antwort sehr sehr sehr dankbar!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2375283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2375283</guid><dc:creator><![CDATA[BLACKMAILER]]></dc:creator><pubDate>Sun, 05 Jan 2014 17:09:17 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladen on Sun, 05 Jan 2014 17:28:38 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>1. Du schreibst in deine Header:</p>
<pre><code>friend const box operator+(box lhs, box const&amp; rhs);
</code></pre>
<p>Das schreibst du in deine Klasse.</p>
<p>2. Du schreibst in deine cpp-Datei:</p>
<pre><code>const box operator+(box lhs, box const&amp; rhs)
{
  lhs.ecent += rhs.ecent;
  return lhs;
}
</code></pre>
<p>Es ist eine freie Funktion und gehört nicht zu deiner Klasse.</p>
<p>3. In der main.cpp kannst du dann schreiben:</p>
<pre><code>box a = 5;
box b = 2;
box c = a+b;
</code></pre>
<p>cout &lt;&lt; c kannst du nicht machen, da du den Ausgabeoperator nicht überladen hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2375292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2375292</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Sun, 05 Jan 2014 17:28:38 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladen on Sun, 05 Jan 2014 18:08:20 GMT]]></title><description><![CDATA[<p>DANKE! Das funktioniert super. Ausgabe is klar.</p>
<p>Nicht notwendig, aber bevor ich wieder länger dran sitz was für dich ne Zeile antwort is... wie mach ich das dann ohne friend? Bzw. ist das jz eine art globale Funktion?</p>
<p>Gibt ja auch das ganze irgendwie als globale Methode, oder falls es das bereits in einer anderen Form is, etwas anders..</p>
<pre><code>box operator+(box b);
</code></pre>
<p>im header weil das iwie dann eine Art a.operator+(b) ist oder so... Das hab ich die ganze Zeit probiert und nicht geschafft...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2375308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2375308</guid><dc:creator><![CDATA[BLACKMAILER]]></dc:creator><pubDate>Sun, 05 Jan 2014 18:08:20 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladen on Sun, 05 Jan 2014 18:13:15 GMT]]></title><description><![CDATA[<p>BLACKMAILER schrieb:</p>
<blockquote>
<p>DANKE! Das funktioniert super. Ausgabe is klar.</p>
<p>Nicht notwendig, aber bevor ich wieder länger dran sitz was für dich ne Zeile antwort is... wie mach ich das dann ohne friend? Bzw. ist das jz eine art globale Funktion?</p>
<p>Gibt ja auch das ganze irgendwie als globale Methode, oder falls es das bereits in einer anderen Form is, etwas anders..</p>
<pre><code>box operator+(box b);
</code></pre>
<p>im header weil das iwie dann eine Art a.operator+(b) ist oder so... Das hab ich die ganze Zeit probiert und nicht geschafft...</p>
</blockquote>
<p>Das Problem ist, wenn du das als Member machst, hast du keine Typumwandlung im ersten Argument.<br />
Als freie Funktion ist das möglich: some_box + 5 und 2 + some_box<br />
Als Member ist nur das möglich: some_box + 2, aber nicht umgekehrt.<br />
Deklaration und Definition folgen hierbei dem selben Schema:<br />
Deklaration:<br />
ReturnTyp Name(ArgumentTyp)<br />
Definition:<br />
ReturnTyp Class::Name(ArgumentTyp)<br />
Name ist in deinem Fall operator+</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2375310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2375310</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sun, 05 Jan 2014 18:13:15 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladen on Sun, 05 Jan 2014 18:14:26 GMT]]></title><description><![CDATA[<p>BLACKMAILER schrieb:</p>
<blockquote>
<p>Nicht notwendig, aber bevor ich wieder länger dran sitz was für dich ne Zeile antwort is... wie mach ich das dann ohne friend? Bzw. ist das jz eine art globale Funktion?</p>
</blockquote>
<p>Ja. Wenn du es ohne friend haben willst, musst du der Klasse eine Methode set_ecent() und get_ecent() verpassen, und die dann bei <code>lhs.ecent += rhs.ecent;</code> verwenden, weil du keinen Zugriff mehr auf ecent hast, weil du ja kein Freund mehr bist.</p>
<p>BLACKMAILER schrieb:</p>
<blockquote>
<pre><code>box operator+(box b);
</code></pre>
<p>im header weil das iwie dann eine Art a.operator+(b) ist oder so... Das hab ich die ganze Zeit probiert und nicht geschafft...</p>
</blockquote>
<p>Das macht kein Sinn. Wenn du a+b machst, soll ja a nicht verändert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2375311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2375311</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Sun, 05 Jan 2014 18:14:26 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladen on Sun, 05 Jan 2014 20:44:50 GMT]]></title><description><![CDATA[<p>BLACKMAILER schrieb:</p>
<blockquote>
<pre><code>box operator+(box b);
</code></pre>
<p>im header weil das iwie dann eine Art a.operator+(b) ist oder so... Das hab ich die ganze Zeit probiert und nicht geschafft...</p>
</blockquote>
<p>Als Memberfunktion:</p>
<pre><code>// box.h

class box
{
...
    box operator +(const box&amp; rhs) const;
};

// box.cpp

box box::operator +(const box&amp; rhs) const
{
    return box(ecent + rhs.ecent);
}
</code></pre>
<p>- osdt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2375347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2375347</guid><dc:creator><![CDATA[osdt]]></dc:creator><pubDate>Sun, 05 Jan 2014 20:44:50 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladen on Sun, 05 Jan 2014 21:45:29 GMT]]></title><description><![CDATA[<p>Danke! Funkt jz alles und alles verstanden! Danke danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2375362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2375362</guid><dc:creator><![CDATA[BLACKMAILER]]></dc:creator><pubDate>Sun, 05 Jan 2014 21:45:29 GMT</pubDate></item></channel></rss>