<?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 oder global?]]></title><description><![CDATA[<p>Ich überlade die OPeratoren &lt;&lt; und &gt;&gt; in meiner Klasse. In manche Bücher finde ich die operatoren in der Klasse als friend definiert aber außerhal der privat oder public Bereich, oder manche Bucher arbeiten mit einer globalen Funktion</p>
<p>Beispiel:</p>
<pre><code>class complex: {
  public:
    complex(double r, double i) { re =r; im = i; }
    double real() { return re; };                     // &lt;= neu
    double imag() { return im; };                     // &lt;= neu
  private:
    doube re, im;
  };

  ostream &amp;operator&lt;&lt;(ostream&amp; o, const complex&amp; c) {
    return o &lt;&lt; c.real() &lt;&lt; &quot; &quot; &lt;&lt; c.imag();          // &lt;= neu: real() +
imag()
  }
</code></pre>
<p>ODER</p>
<pre><code>class complex: {
 friend ostream &amp;operator&lt;&lt;(ostream&amp; o, const complex&amp; c) {
    return o &lt;&lt; c.re &lt;&lt; &quot; &quot; &lt;&lt; c.im;          
imag()
  public:
    complex(double r, double i) { re =r; im = i; }
    double real() { return re; };                     // &lt;= neu
    double imag() { return im; };                     // &lt;= neu
  private:
    doube re, im;
  };
</code></pre>
<p>Bitte Vorteile und Nachteile enumerieren!</p>
<p>Danke Carmen</p>
<p>}</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/142495/friend-oder-global</link><generator>RSS for Node</generator><lastBuildDate>Tue, 01 Sep 2026 21:57:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/142495.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 31 Mar 2006 06:11:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to friend oder global? on Fri, 31 Mar 2006 06:11:18 GMT]]></title><description><![CDATA[<p>Ich überlade die OPeratoren &lt;&lt; und &gt;&gt; in meiner Klasse. In manche Bücher finde ich die operatoren in der Klasse als friend definiert aber außerhal der privat oder public Bereich, oder manche Bucher arbeiten mit einer globalen Funktion</p>
<p>Beispiel:</p>
<pre><code>class complex: {
  public:
    complex(double r, double i) { re =r; im = i; }
    double real() { return re; };                     // &lt;= neu
    double imag() { return im; };                     // &lt;= neu
  private:
    doube re, im;
  };

  ostream &amp;operator&lt;&lt;(ostream&amp; o, const complex&amp; c) {
    return o &lt;&lt; c.real() &lt;&lt; &quot; &quot; &lt;&lt; c.imag();          // &lt;= neu: real() +
imag()
  }
</code></pre>
<p>ODER</p>
<pre><code>class complex: {
 friend ostream &amp;operator&lt;&lt;(ostream&amp; o, const complex&amp; c) {
    return o &lt;&lt; c.re &lt;&lt; &quot; &quot; &lt;&lt; c.im;          
imag()
  public:
    complex(double r, double i) { re =r; im = i; }
    double real() { return re; };                     // &lt;= neu
    double imag() { return im; };                     // &lt;= neu
  private:
    doube re, im;
  };
</code></pre>
<p>Bitte Vorteile und Nachteile enumerieren!</p>
<p>Danke Carmen</p>
<p>}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1027624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1027624</guid><dc:creator><![CDATA[carmen]]></dc:creator><pubDate>Fri, 31 Mar 2006 06:11:18 GMT</pubDate></item><item><title><![CDATA[Reply to friend oder global? on Fri, 31 Mar 2006 06:17:07 GMT]]></title><description><![CDATA[<p>OK ich habe selber eine ANtwort aber ich möchte mehr...<br />
Das ist meine Version</p>
<p>Der Ausgabeoperator muss eine globale Funktion (und keine Methode) sein, sonst könnte man nicht &quot;cout &lt;&lt; c;&quot; schreiben.</p>
<p>Der Ausgabeoperator oben funktioniert aber nicht!!<br />
Weil der Ausgabeoperator eine globale Funktion ist, darf er nicht auf die privaten Datenelemente (re, im) zugreifen.</p>
<p>Lösung 1: Man deklariert in der Klasse den Ausgabeoperator als &quot;friend&quot;<br />
dann darf er auf die privaten Datenelemente (re, im) zugreifen</p>
<p>Lösung 2: Man gibt der Klasse Zugriffsfunktionen wie &quot;real()&quot; oder &quot;imag()&quot;<br />
also</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1027633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1027633</guid><dc:creator><![CDATA[carmen]]></dc:creator><pubDate>Fri, 31 Mar 2006 06:17:07 GMT</pubDate></item><item><title><![CDATA[Reply to friend oder global? on Fri, 31 Mar 2006 06:25:37 GMT]]></title><description><![CDATA[<p>Lösung 3: Man definiert eine öffentliche Memberfunktion &quot;void print(ostream&amp;);&quot; und ruft diese von operator&lt;&lt; aus auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1027639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1027639</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 31 Mar 2006 06:25:37 GMT</pubDate></item><item><title><![CDATA[Reply to friend oder global? on Fri, 31 Mar 2006 06:31:23 GMT]]></title><description><![CDATA[<p>Kannst zu ein Beispiel mit COde geben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1027648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1027648</guid><dc:creator><![CDATA[carmen]]></dc:creator><pubDate>Fri, 31 Mar 2006 06:31:23 GMT</pubDate></item><item><title><![CDATA[Reply to friend oder global? on Fri, 31 Mar 2006 06:35:32 GMT]]></title><description><![CDATA[<p>klar kann ich:</p>
<pre><code class="language-cpp">class Test
{
  int value;
public:
  Test(int v=0) : value(v) {}
  void print(ostream&amp;) const;
};

ostream&amp; operator&lt;&lt;(ostream&amp; out,const test&amp; data)
{
  data.print(out);
  return out;
}

void Test::print(ostream out)
{
  out&lt;&lt;&quot;Klasse Test: &quot;&lt;&lt;value&lt;&lt;endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1027652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1027652</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 31 Mar 2006 06:35:32 GMT</pubDate></item><item><title><![CDATA[Reply to friend oder global? on Fri, 31 Mar 2006 07:20:56 GMT]]></title><description><![CDATA[<p>Dake Cstoll!<br />
Ich hábe es verstanden.Aber der Nachteil ist, dass ich eine neue Funktion nur für Ausgabe definieren muss...es ist nicht ein großer Unterschied Zwischen Lösung 2 und 3 ...Aber es ist eine kreative Lösung..<br />
Danke Carmen</p>
<p>PS Ich versuche jetzt ein Smilie einzufügen(Ob es klappt sehen wir gleich)<br />
<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/1027678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1027678</guid><dc:creator><![CDATA[carmen]]></dc:creator><pubDate>Fri, 31 Mar 2006 07:20:56 GMT</pubDate></item><item><title><![CDATA[Reply to friend oder global? on Fri, 31 Mar 2006 07:24:25 GMT]]></title><description><![CDATA[<p>Also ich sehe es als Vorteil an, <em>nur</em> eine Ausgabefunktion statt einem ganzen Paket Zugriffsfunktionen definieren zu müssen <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>(und außerdem kannst du auf diese Weise auch eine Vererbungshierarchie handhaben - du mußt nur die print()-Methode virtuell deklarieren und jede von &quot;Test&quot; abgeleitete Klasse kann selbst entscheiden, wie sie ausgegeben werden will)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1027682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1027682</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 31 Mar 2006 07:24:25 GMT</pubDate></item><item><title><![CDATA[Reply to friend oder global? on Fri, 31 Mar 2006 08:17:04 GMT]]></title><description><![CDATA[<p>so gesehen hast du Recht... <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="🙂"
    /><br />
an Vererbung habe ich nicht gedacht. und ich habe auch nicht gedacht, dass klassen sein können, wo man überhaupt nicht nötig hat GET oder SET Funktionen zu definieren.DANKE!<br />
Ich dachte nur ein meine Spezielle Klasse, wo die Zugriffsfunktionen sind sowieso zu definiere ...<br />
CIAO</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1027720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1027720</guid><dc:creator><![CDATA[carmen]]></dc:creator><pubDate>Fri, 31 Mar 2006 08:17:04 GMT</pubDate></item></channel></rss>