<?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[Schlüsselwort friend]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab ein kleines Verständnisproblem mit dem Schlüsselwort friend.</p>
<p>ich hab folgende Dekleration in meiner Klasse:</p>
<pre><code class="language-cpp">friend ostream&amp; operator&lt;&lt;(ostream &amp;ostr, const String &amp;s);
</code></pre>
<p>Wieso mach man das? Man kann doch das friends auch einfach weg lassen und es dann als als normale Methode der Klasse ausprogrammieren.</p>
<p>Oder macht man das um ausserhalb der Klasse einen Zugriff auf die Attribute der KLasse zu erlangen. Die mit fiend markierte Methode hat ja vollen Zugriff auf alles Attribute.</p>
<p>Über eine Antwort würde ich mich sehr freuen!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/286456/schlüsselwort-friend</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 22:22:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/286456.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 10 May 2011 14:00:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Schlüsselwort friend on Tue, 10 May 2011 14:00:46 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab ein kleines Verständnisproblem mit dem Schlüsselwort friend.</p>
<p>ich hab folgende Dekleration in meiner Klasse:</p>
<pre><code class="language-cpp">friend ostream&amp; operator&lt;&lt;(ostream &amp;ostr, const String &amp;s);
</code></pre>
<p>Wieso mach man das? Man kann doch das friends auch einfach weg lassen und es dann als als normale Methode der Klasse ausprogrammieren.</p>
<p>Oder macht man das um ausserhalb der Klasse einen Zugriff auf die Attribute der KLasse zu erlangen. Die mit fiend markierte Methode hat ja vollen Zugriff auf alles Attribute.</p>
<p>Über eine Antwort würde ich mich sehr freuen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2061260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2061260</guid><dc:creator><![CDATA[x-rey]]></dc:creator><pubDate>Tue, 10 May 2011 14:00:46 GMT</pubDate></item><item><title><![CDATA[Reply to Schlüsselwort friend on Tue, 10 May 2011 14:03:40 GMT]]></title><description><![CDATA[<p>x-rey schrieb:</p>
<blockquote>
<p>Wieso mach man das? Man kann doch das friends auch einfach weg lassen und es dann als als normale Methode der Klasse ausprogrammieren.</p>
</blockquote>
<p>Kann man nicht. Zumindest nicht den operator&lt;&lt;. Bei Operatoren, die Klassenmethoden sind, ist der linke Operand immer ein Objekt der Klasse. Siehe auch hier:</p>
<p><a href="http://magazin.c-plusplus.net/artikel/%DCberladung%20von%20Operatoren%20in%20CPlusPlus%20%28Teil%201%29" rel="nofollow">http://magazin.c-plusplus.net/artikel/�berladung von Operatoren in CPlusPlus (Teil 1)</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2061263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2061263</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 10 May 2011 14:03:40 GMT</pubDate></item><item><title><![CDATA[Reply to Schlüsselwort friend on Tue, 10 May 2011 14:07:43 GMT]]></title><description><![CDATA[<p>Wie Pumuckl schon sagte, das kommt ganz auf den zu überladenden Operator an. Manche macht man als Klassenmember, manche eben als freie Funktion. Da bei einer Memberfunktion, also auch bei einem überladenen Operator innerhalb der Klasse, der linke Operand immer vom Typ der Klasse ist, ist es für denn Operator&lt;&lt; sehr unvorteilhaft. Denn beim Operator &lt;&lt; ist der Rückgabetyp immer eine Referenz auf ein ostream-Objekt, damit eine Verkettung wie</p>
<pre><code class="language-cpp">cout &lt;&lt; &quot;Hallo&quot; &lt;&lt; &quot;Welt&quot; &lt;&lt; endl;
</code></pre>
<p>möglich ist.</p>
<p>Wenn der linke Operand also nicht vom Typ der Klasse sein darf, musst du ihn als freie Funktion deklarieren und wenn er vom Typ der Klasse sein soll, macht man ihn normalerweise als Member der Klasse.</p>
<p>Und wenn die Funktion frei ist, ist ja klar dass du sie als friend deklarieren musst, damit du von außerhalb auf die privaten Elemente zugreifen darfst.</p>
<p>Lg freeG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2061264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2061264</guid><dc:creator><![CDATA[fr33g]]></dc:creator><pubDate>Tue, 10 May 2011 14:07:43 GMT</pubDate></item><item><title><![CDATA[Reply to Schlüsselwort friend on Tue, 10 May 2011 14:16:21 GMT]]></title><description><![CDATA[<p>fr33g schrieb:</p>
<blockquote>
<p>und wenn er vom Typ der Klasse sein soll, macht man ihn normalerweise als Member der Klasse.</p>
</blockquote>
<p>Macht man normalerweise auch nicht, wenn es z.B. Klassen gibt, deren Objekte implizit in ein Objekt der fraglichen Klasse konvertiert werden können. Sonst könnten nämlich die linken Operanden nicht konvertiert werden (weil sie ja vom Typ der Klasse sein müssen) die rechten aber schon.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">class MyInt
{
  int i;
public: 
  MyInt(int i): i(i) {}
  bool operator&lt; (MyInt const&amp; other)
  {
    return i &lt; other.i;
  }
};

int main()
{
  MyInt a(5);
  MyInt b(10);
  bool b1 = a &lt; b; //OK
  bool b2 = a &lt; 6; //OK, aequivalent zu a &lt; MyInt(6);
  bool b3 = 2 &lt; b; //FEHLER
}
</code></pre>
<p>[/cpp]</p>
<p>Steht auch in meinem oben verlinkten Magazinartikel <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/2061269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2061269</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 10 May 2011 14:16:21 GMT</pubDate></item></channel></rss>