<?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[friend-Funktion und Operatorüberladung]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich versuch gerade folgende Aufgabe zu lösen:</p>
<blockquote>
<p>Entwickeln Sie die Klasse Arr, die ein Feld mit zwei int-Werten enthält. Überladen Sie den +Operator so, dass die Addition zweier Arr-Objekte, die Addition eines Arr-Objekts mit einer Konstanten und die Addition einer Konstanten mit einem Arr-Objekt möglich wird. Verwenden Sie für die Überladung ausschließlich friend-Funktionen und keine Methoden der Klasse Arr. Weitere Methoden der Klasse Arr sind im Teil a) nicht verlangt.<br />
(Bei einer Addition zweier Objekte sollen die jeweiligen Feldelemente addiert werden. Ist eine Konstante beteiligt, wird diese Konstante zu jedem der beiden Feldelemente addiert.)</p>
</blockquote>
<p>Also soweit kein Problem...<br />
So sieht meine momentane Lösung aus:</p>
<pre><code class="language-cpp">#ifndef Uebungsblock_3_Aufgabe_2_Arr_h
    #define Uebungsblock_3_Aufgabe_2_Arr_h

    class Arr {
    int number[2];
    public:
    Arr(int x, int y);
    void print();
    void operator+(const Arr&amp; a);
    void operator+(int i);
    };

    #endif
</code></pre>
<pre><code class="language-cpp">#include &lt;iostream&gt;
    #include &quot;Arr.h&quot;

    Arr::Arr(int x, int y){
    number[0] = x;
    number[1] = y;
    }

    void Arr::print() {
    std::cout &lt;&lt; &quot;number[0] = &quot; &lt;&lt; number[0] &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;number[1] = &quot; &lt;&lt; number[1] &lt;&lt; std::endl;
    }

    void Arr::operator+(const Arr&amp; a) {
    number[0] += a.number[0];
    number[1] += a.number[1];
    }

    void Arr::operator+(int i) {
    number[0] += i;
    number[1] += i;
    }
</code></pre>
<p>So funktioniert das auch...<br />
Es gibt aber drei Sachen die ich aber nicht ganz verstehe...</p>
<p>1 und 2.<br />
Wieso soll ich die ausschließlich friend-Funktionen nutzen?<br />
Es funktioniert ja auch ohne...<br />
Ich weiß da die obere Funktion auf private-Attribute zugreift sollte ich das machen aber es funktioniert ja auch so und sobald ich eine friend-Funktion daraus mache meckert der Compiler...</p>
<p>Ich hab folgendes gemacht:</p>
<pre><code class="language-cpp">#ifndef Uebungsblock_3_Aufgabe_2_Arr_h
    #define Uebungsblock_3_Aufgabe_2_Arr_h

    class Arr {
    int number[2];
    public:
    Arr(int x, int y);
    void print();
    friend void operator+(const Arr&amp; a);
    void operator+(int i);
    };

    #endif
</code></pre>
<pre><code class="language-cpp">#include &lt;iostream&gt;
    #include &quot;Arr.h&quot;

    Arr::Arr(int x, int y){
    number[0] = x;
    number[1] = y;
    }

    void Arr::print() {
    std::cout &lt;&lt; &quot;number[0] = &quot; &lt;&lt; number[0] &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;number[1] = &quot; &lt;&lt; number[1] &lt;&lt; std::endl;
    }

    friend void Arr::operator+(const Arr&amp; a) {
    number[0] += a.number[0];
    number[1] += a.number[1];
    }

    void Arr::operator+(int i) {
    number[0] += i;
    number[1] += i;
    }
</code></pre>
<p>Dann sagt er mir aber in der Implementierungs-Datei in Zeile 14 <strong>&quot;Out-of-line definition of 'operator+' does not match any declaration in 'Arr'&quot;</strong>...<br />
Auch wenn ich das &quot;friedn&quot; in der Implementierung vorne weg lasse kommt das gleiche... Was mache ich falsch?</p>
<ol start="3">
<li></li>
</ol>
<p>Wie soll ich bitte eine Konstande mit einem Arr-Objekt addieren?<br />
Das müsste ja in etwa so ausschauen:</p>
<pre><code class="language-cpp">Arr a(1,2);

    int sol = 5 + a;
</code></pre>
<p>Damit das geht müsste ich doch den +Operator von int oder so überladen oder gibt es da eine andere Möglichkeit?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/302615/friend-funktion-und-operatorüberladung</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 06:50:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/302615.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Apr 2012 08:36:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to friend-Funktion und Operatorüberladung on Mon, 23 Apr 2012 08:36:28 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich versuch gerade folgende Aufgabe zu lösen:</p>
<blockquote>
<p>Entwickeln Sie die Klasse Arr, die ein Feld mit zwei int-Werten enthält. Überladen Sie den +Operator so, dass die Addition zweier Arr-Objekte, die Addition eines Arr-Objekts mit einer Konstanten und die Addition einer Konstanten mit einem Arr-Objekt möglich wird. Verwenden Sie für die Überladung ausschließlich friend-Funktionen und keine Methoden der Klasse Arr. Weitere Methoden der Klasse Arr sind im Teil a) nicht verlangt.<br />
(Bei einer Addition zweier Objekte sollen die jeweiligen Feldelemente addiert werden. Ist eine Konstante beteiligt, wird diese Konstante zu jedem der beiden Feldelemente addiert.)</p>
</blockquote>
<p>Also soweit kein Problem...<br />
So sieht meine momentane Lösung aus:</p>
<pre><code class="language-cpp">#ifndef Uebungsblock_3_Aufgabe_2_Arr_h
    #define Uebungsblock_3_Aufgabe_2_Arr_h

    class Arr {
    int number[2];
    public:
    Arr(int x, int y);
    void print();
    void operator+(const Arr&amp; a);
    void operator+(int i);
    };

    #endif
</code></pre>
<pre><code class="language-cpp">#include &lt;iostream&gt;
    #include &quot;Arr.h&quot;

    Arr::Arr(int x, int y){
    number[0] = x;
    number[1] = y;
    }

    void Arr::print() {
    std::cout &lt;&lt; &quot;number[0] = &quot; &lt;&lt; number[0] &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;number[1] = &quot; &lt;&lt; number[1] &lt;&lt; std::endl;
    }

    void Arr::operator+(const Arr&amp; a) {
    number[0] += a.number[0];
    number[1] += a.number[1];
    }

    void Arr::operator+(int i) {
    number[0] += i;
    number[1] += i;
    }
</code></pre>
<p>So funktioniert das auch...<br />
Es gibt aber drei Sachen die ich aber nicht ganz verstehe...</p>
<p>1 und 2.<br />
Wieso soll ich die ausschließlich friend-Funktionen nutzen?<br />
Es funktioniert ja auch ohne...<br />
Ich weiß da die obere Funktion auf private-Attribute zugreift sollte ich das machen aber es funktioniert ja auch so und sobald ich eine friend-Funktion daraus mache meckert der Compiler...</p>
<p>Ich hab folgendes gemacht:</p>
<pre><code class="language-cpp">#ifndef Uebungsblock_3_Aufgabe_2_Arr_h
    #define Uebungsblock_3_Aufgabe_2_Arr_h

    class Arr {
    int number[2];
    public:
    Arr(int x, int y);
    void print();
    friend void operator+(const Arr&amp; a);
    void operator+(int i);
    };

    #endif
</code></pre>
<pre><code class="language-cpp">#include &lt;iostream&gt;
    #include &quot;Arr.h&quot;

    Arr::Arr(int x, int y){
    number[0] = x;
    number[1] = y;
    }

    void Arr::print() {
    std::cout &lt;&lt; &quot;number[0] = &quot; &lt;&lt; number[0] &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;number[1] = &quot; &lt;&lt; number[1] &lt;&lt; std::endl;
    }

    friend void Arr::operator+(const Arr&amp; a) {
    number[0] += a.number[0];
    number[1] += a.number[1];
    }

    void Arr::operator+(int i) {
    number[0] += i;
    number[1] += i;
    }
</code></pre>
<p>Dann sagt er mir aber in der Implementierungs-Datei in Zeile 14 <strong>&quot;Out-of-line definition of 'operator+' does not match any declaration in 'Arr'&quot;</strong>...<br />
Auch wenn ich das &quot;friedn&quot; in der Implementierung vorne weg lasse kommt das gleiche... Was mache ich falsch?</p>
<ol start="3">
<li></li>
</ol>
<p>Wie soll ich bitte eine Konstande mit einem Arr-Objekt addieren?<br />
Das müsste ja in etwa so ausschauen:</p>
<pre><code class="language-cpp">Arr a(1,2);

    int sol = 5 + a;
</code></pre>
<p>Damit das geht müsste ich doch den +Operator von int oder so überladen oder gibt es da eine andere Möglichkeit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204740</guid><dc:creator><![CDATA[vandread]]></dc:creator><pubDate>Mon, 23 Apr 2012 08:36:28 GMT</pubDate></item><item><title><![CDATA[Reply to friend-Funktion und Operatorüberladung on Mon, 23 Apr 2012 11:20:15 GMT]]></title><description><![CDATA[<p>Hallo vandread.</p>
<p>zu 1 und 2:<br />
es gibt keinen friend operator+(//...). Du kannst operator+ als Methode oder freie Funktion überladen(du hast ersteres). Muss auch ehrlich sagen ich verstehh die Aufgabenstellung nicht zu 100%. Wo hast du die her?</p>
<p>zu 3.<br />
Eine Regel besagt, dass mindestens ein Argument ein benutzerdefinierter Datentyp sein muss.<br />
du kannst schreiben: Arr operator+(const Arr&amp; lhs, const Arr&amp; rhs), oder<br />
Arr operator(const Arr&amp; lhs, const int&amp; rhs), oder Arr operator+(const int lhs, const Arr&amp; rhs).</p>
<p>gruß<br />
syntax</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204822</guid><dc:creator><![CDATA[Syntax_error]]></dc:creator><pubDate>Mon, 23 Apr 2012 11:20:15 GMT</pubDate></item><item><title><![CDATA[Reply to friend-Funktion und Operatorüberladung on Mon, 23 Apr 2012 11:42:24 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/26322">@vandread</a>: Die friend Funktion ist nur eine freie Funktion, die Tatsache dass ihre Definition in der Klasse stehen kann ändert daran nix.<br />
Dein friend operator + wird daher also natürlich zwei Parameter benötigen und nicht nur einen.<br />
Abgesehen davon wird es wohl sinnvoll sein, deinen Operatoren einen anderen Rückgabetyp als void zu verpassen.<br />
Wenn du einen operator + als Methode implementierst, wird es sich in der Regel anbieten, diese const zu machen.<br />
Du verwendest += in deiner Implementierung von +. Bist du dir sicher dass das eine gute Idee ist? <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>Ich seh in dem konkreten Beispiel aber auch keinen unmittelbaren Grund, die Operatoren ausschließlich als friends zu implementieren. Aber wenn die Aufgabenstellung das explizit verlangt, dann solltest du das wohl so machen...</p>
<p>Syntax_error schrieb:</p>
<blockquote>
<p>zu 1 und 2:<br />
es gibt keinen friend operator+(//...). Du kannst operator+ als Methode oder freie Funktion überladen(du hast ersteres).</p>
</blockquote>
<p>Und was denkst du ist eine friend Funktion, wenn es nicht eine freie Funktion ist? <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/2204827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204827</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 23 Apr 2012 11:42:24 GMT</pubDate></item><item><title><![CDATA[Reply to friend-Funktion und Operatorüberladung on Mon, 23 Apr 2012 12:20:25 GMT]]></title><description><![CDATA[<p>dot schrieb:</p>
<blockquote>
<p>Und was denkst du ist eine friend Funktion, wenn es nicht eine freie Funktion ist? <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>Eine Methode, Memberfunktion. friend Funktion wär mir komplett neu, aber ich lasse mich auch eines besseren belehren, wenn dies auch eine friend-Funktion sein sollte <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>gruß<br />
syntax</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204848</guid><dc:creator><![CDATA[Syntax_error]]></dc:creator><pubDate>Mon, 23 Apr 2012 12:20:25 GMT</pubDate></item><item><title><![CDATA[Reply to friend-Funktion und Operatorüberladung on Mon, 23 Apr 2012 12:23:24 GMT]]></title><description><![CDATA[<p>Syntax_error schrieb:</p>
<blockquote>
<p>Eine Methode, Memberfunktion. friend Funktion wär mir komplett neu, aber ich lasse mich auch eines besseren belehren, wenn dies auch eine friend-Funktion sein sollte <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>
</blockquote>
<p>Was genau wäre der Sinn davon, eine Methode zu einem friend zu machen? <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/2204852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204852</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 23 Apr 2012 12:23:24 GMT</pubDate></item><item><title><![CDATA[Reply to friend-Funktion und Operatorüberladung on Mon, 23 Apr 2012 12:29:16 GMT]]></title><description><![CDATA[<p>oje jetzt verwirrst du mich?? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
was ist jetzt eine friend-Funktion??</p>
<p>gruß<br />
syntax</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204854</guid><dc:creator><![CDATA[Syntax_error]]></dc:creator><pubDate>Mon, 23 Apr 2012 12:29:16 GMT</pubDate></item><item><title><![CDATA[Reply to friend-Funktion und Operatorüberladung on Mon, 23 Apr 2012 13:22:02 GMT]]></title><description><![CDATA[<p>Syntax_error schrieb:</p>
<blockquote>
<p>was ist jetzt eine friend-Funktion??</p>
</blockquote>
<p>Vermutlich ist damit eine Funktion gemeint, die als friend deiner Klasse deklariert wurde. Was das bedeutet findest du hoffentlich irgendwo im C++ Lehrbuch deiner Wahl...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204882</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 23 Apr 2012 13:22:02 GMT</pubDate></item></channel></rss>