<?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[Operatoren überladen]]></title><description><![CDATA[<p>Hallo, ich hab die Klasse Complex als Beispiel zum Überladen von Operatoren verwendet. Alles funktioniert soweit ganz gut. Hier mal der Quelltext</p>
<pre><code>class Complex
{
  private:
          float Re,Im;
  public:
          Complex(float re,float im);
          Complex operator +(const float &amp;y);
          void print();
  friend Complex operator +(const Complex &amp;y1,const Complex &amp;y2);
  friend ostream &amp; operator &lt;&lt;(ostream &amp; os,const Complex x);
};

#include&lt;iostream&gt;
using namespace std;

#include &quot;Complex.h&quot;
//---------------------------------------------------------------------------
#pragma package(smart_init)

Complex::Complex(float re,float im)
{
   Re=re;
   Im=im;
}
//---------------------------------------------------------------------------
void Complex::print()
{
  cout&lt;&lt;Re&lt;&lt;&quot; + &quot;&lt;&lt;Im&lt;&lt;&quot; i&quot;&lt;&lt;endl;
}
//---------------------------------------------------------------------------
Complex Complex::operator +(const float &amp;y)
{
  Complex tmp(0,0);
  tmp.Re=Re+y;
  tmp.Im=Im;
  return tmp;
}
//---------------------------------------------------------------------------
Complex operator +(const Complex &amp;y1,const Complex &amp;y2)
{
  Complex tmp(0,0);
  tmp.Re=y1.Re+y2.Re;
  tmp.Im=y1.Im+y2.Im;
  return tmp;
}
//---------------------------------------------------------------------------
ostream &amp; operator &lt;&lt;(ostream &amp; os,const Complex x)
{
  os&lt;&lt;x.Re&lt;&lt;&quot; + &quot;&lt;&lt;x.Im&lt;&lt;&quot; i&quot;;
  return os;
}

#include&lt;iostream&gt;
using namespace std;

#include&quot;Complex.h&quot;

int main(int argc, char* argv[])
{
   Complex a(3.2,1),b(2,3.3);
   a=a+b;
   a=a+3.2;
   cout&lt;&lt;a&lt;&lt;endl;    // das funktioniert
   cout&lt;&lt;a+b&lt;&lt;endl;  //das Funktioniert nicht
   getchar();
   return 0;
}
</code></pre>
<p>Jetzt meine Frage: Wie in der main Funktion zu sehen, will ich einmal eine Komplexe Zahl ausgeben und einmal eine Rechnung, die als Ergebnis ja auch eine komplexe Zahl liefert. Die Zahl geht, die Rechnung nicht.<br />
Weiß jemand weshalb? Rein prinzipiell muß es ja gehen, da auch std_::string beispielsweise solche Operationen zuläßt. Wie müßte ich den Quelltext abändern damit es funktioniert.</p>
<p>Vilen Dank schon mal</p>
<p>Ebi01</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/203785/operatoren-überladen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 05 Apr 2026 12:45:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/203785.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 26 Jan 2008 14:05:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operatoren überladen on Sat, 26 Jan 2008 14:05:59 GMT]]></title><description><![CDATA[<p>Hallo, ich hab die Klasse Complex als Beispiel zum Überladen von Operatoren verwendet. Alles funktioniert soweit ganz gut. Hier mal der Quelltext</p>
<pre><code>class Complex
{
  private:
          float Re,Im;
  public:
          Complex(float re,float im);
          Complex operator +(const float &amp;y);
          void print();
  friend Complex operator +(const Complex &amp;y1,const Complex &amp;y2);
  friend ostream &amp; operator &lt;&lt;(ostream &amp; os,const Complex x);
};

#include&lt;iostream&gt;
using namespace std;

#include &quot;Complex.h&quot;
//---------------------------------------------------------------------------
#pragma package(smart_init)

Complex::Complex(float re,float im)
{
   Re=re;
   Im=im;
}
//---------------------------------------------------------------------------
void Complex::print()
{
  cout&lt;&lt;Re&lt;&lt;&quot; + &quot;&lt;&lt;Im&lt;&lt;&quot; i&quot;&lt;&lt;endl;
}
//---------------------------------------------------------------------------
Complex Complex::operator +(const float &amp;y)
{
  Complex tmp(0,0);
  tmp.Re=Re+y;
  tmp.Im=Im;
  return tmp;
}
//---------------------------------------------------------------------------
Complex operator +(const Complex &amp;y1,const Complex &amp;y2)
{
  Complex tmp(0,0);
  tmp.Re=y1.Re+y2.Re;
  tmp.Im=y1.Im+y2.Im;
  return tmp;
}
//---------------------------------------------------------------------------
ostream &amp; operator &lt;&lt;(ostream &amp; os,const Complex x)
{
  os&lt;&lt;x.Re&lt;&lt;&quot; + &quot;&lt;&lt;x.Im&lt;&lt;&quot; i&quot;;
  return os;
}

#include&lt;iostream&gt;
using namespace std;

#include&quot;Complex.h&quot;

int main(int argc, char* argv[])
{
   Complex a(3.2,1),b(2,3.3);
   a=a+b;
   a=a+3.2;
   cout&lt;&lt;a&lt;&lt;endl;    // das funktioniert
   cout&lt;&lt;a+b&lt;&lt;endl;  //das Funktioniert nicht
   getchar();
   return 0;
}
</code></pre>
<p>Jetzt meine Frage: Wie in der main Funktion zu sehen, will ich einmal eine Komplexe Zahl ausgeben und einmal eine Rechnung, die als Ergebnis ja auch eine komplexe Zahl liefert. Die Zahl geht, die Rechnung nicht.<br />
Weiß jemand weshalb? Rein prinzipiell muß es ja gehen, da auch std_::string beispielsweise solche Operationen zuläßt. Wie müßte ich den Quelltext abändern damit es funktioniert.</p>
<p>Vilen Dank schon mal</p>
<p>Ebi01</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1443998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1443998</guid><dc:creator><![CDATA[Ebi01]]></dc:creator><pubDate>Sat, 26 Jan 2008 14:05:59 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren überladen on Sat, 26 Jan 2008 14:45:42 GMT]]></title><description><![CDATA[<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-167423.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-167423.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1444015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1444015</guid><dc:creator><![CDATA[Ramsis]]></dc:creator><pubDate>Sat, 26 Jan 2008 14:45:42 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren überladen on Sat, 26 Jan 2008 17:51:42 GMT]]></title><description><![CDATA[<p>Der Link ist ja schon schön, aber weiter hat er mich nicht gebracht. Ich weiß ja eigentlich wie es geht. Nur halt wenn ich eine Rechnung ausgeben will tut das nicht.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15390">@Ramses</a>: Klingt als ob das für dich ein ganz triviales Problem wär. laß mich doch an deinem Wissen teilhaben</p>
<p>Ebi01</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1444124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1444124</guid><dc:creator><![CDATA[Ebi01]]></dc:creator><pubDate>Sat, 26 Jan 2008 17:51:42 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren überladen on Sat, 26 Jan 2008 18:12:27 GMT]]></title><description><![CDATA[<p>Ebi01 schrieb:</p>
<blockquote>
<p>Die Zahl geht, die Rechnung nicht.<br />
Weiß jemand weshalb?</p>
</blockquote>
<p>Soll das heissen dass das Programm ungenau rechnet? <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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1444133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1444133</guid><dc:creator><![CDATA[Ramsis]]></dc:creator><pubDate>Sat, 26 Jan 2008 18:12:27 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren überladen on Sat, 26 Jan 2008 18:19:22 GMT]]></title><description><![CDATA[<p>&quot;geht nicht&quot; ist keine Fehlerbeschreibung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1444137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1444137</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 26 Jan 2008 18:19:22 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren überladen on Sat, 26 Jan 2008 18:40:18 GMT]]></title><description><![CDATA[<p>Ich hab deinen Code mit VS2005EE ausprobiert</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
using namespace std;

class Complex
{
  private:
          float Re,Im;
  public:
          Complex(float re,float im);
          Complex operator +(const float &amp;y);
          void print();
  friend Complex operator +(const Complex &amp;y1,const Complex &amp;y2);
  friend ostream &amp; operator &lt;&lt;(ostream &amp; os,const Complex x);
};

Complex::Complex(float re,float im)
{
   Re=re;
   Im=im;
}

void Complex::print()
{
  cout&lt;&lt;Re&lt;&lt;&quot; + &quot;&lt;&lt;Im&lt;&lt;&quot; i&quot;&lt;&lt;endl;
}

Complex Complex::operator +(const float &amp;y)
{
  Complex tmp(0,0);
  tmp.Re=Re+y;
  tmp.Im=Im;
  return tmp;
}

Complex operator +(const Complex &amp;y1,const Complex &amp;y2)
{
  Complex tmp(0,0);
  tmp.Re=y1.Re+y2.Re;
  tmp.Im=y1.Im+y2.Im;
  return tmp;
}

ostream &amp; operator &lt;&lt;(ostream &amp; os,const Complex x)
{
  os&lt;&lt;x.Re&lt;&lt;&quot; + &quot;&lt;&lt;x.Im&lt;&lt;&quot; i&quot;;
  return os;
}

int main(int argc, char* argv[])
{
   Complex a(3.2, 1);
   Complex b(2, 3.3);

   a = a + b;
   a = a + 3.2;

   cout &lt;&lt; &quot;A: &quot; &lt;&lt; a &lt;&lt; endl;   
   cout &lt;&lt; &quot;B: &quot; &lt;&lt; a+b &lt;&lt; endl;  

   return 0;
}
</code></pre>
<p>Ausgabe:</p>
<p>A: 8.4 + 4.3 + i<br />
B: 10.4 + 7.6 + i</p>
<p>ein paar Warnungen kammen weil implizite double zu float cast</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1444150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1444150</guid><dc:creator><![CDATA[Ramsis]]></dc:creator><pubDate>Sat, 26 Jan 2008 18:40:18 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren überladen on Sat, 26 Jan 2008 21:49:27 GMT]]></title><description><![CDATA[<ol>
<li>operator+ sollte ein Objekt vom Typ const Complex zurückgeben, um Zuweisungen an das Ergebnis zu verhindern:</li>
</ol>
<pre><code class="language-cpp">(a+b) = c; //geht, wenn das Ergebnis von a+b nicht const ist
</code></pre>
<ol start="2">
<li>operator&lt;&lt; sollte eine reference to const nehmen (const Complex&amp;), kein const Complex. Das spart ne unnötige Kopie.</li>
</ol>
<p>Ob das dein Problem löst weiß ich nicht, aus dem Stehgreif sieht dein Code für mich in Ordnung aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1444232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1444232</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 26 Jan 2008 21:49:27 GMT</pubDate></item></channel></rss>