<?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[[Gelöst] Probleme beim Überladen von Operatoren]]></title><description><![CDATA[<p>Hallo Comunity!</p>
<p>Ich versuche mich gerade beim Überladen von Operatoren.<br />
Dazu habe ich mir eine Klasse Complex gebaut, um real- und immaginäre Anteile zu addieren.</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

class Complex{

	private:

		double real;
		double imaginary;

	public:

		friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp;, Complex&amp;);
		Complex(double rreal, double iimaginary);
		Complex&amp; operator+(const Complex&amp;,const Complex&amp;);
		Complex&amp; operator=(const Complex&amp;);
		Complex&amp; operator-(const Complex&amp;);
};

int main(int argc, char *argv[])
{

	Complex my_Complex_1(10.0, 11.1);
	Complex my_Complex_2(23.23, 3.232);

	std::cout&lt;&lt;my_Complex_2&lt;&lt;std::endl;

   system(&quot;PAUSE&quot;);
   return EXIT_SUCCESS;
}

Complex::Complex(double rreal, double iimaginary)
	: real(rreal), imaginary(iimaginary){}

std::ostream&amp; operator&lt;&lt;(std::ostream&amp;, Complex&amp; a){

	std::cout&lt;&lt;a.real&lt;&lt;std::endl&lt;&lt;a.imaginary&lt;&lt;std::endl;

}

Complex&amp; operator+(const Complex&amp; a, const Complex&amp; b){

	Complex my_Complex_3(0,0);

	my_Complex_3.real=a.real+b.real;
	my_Complex_3.imaginary=a.imaginary+b.imaginary;

	return my_Complex_3;
}
</code></pre>
<p>Der &lt;&lt; operator funktioniert soweit, aber die Addition lässt er nicht kompilieren.<br />
Fehler:</p>
<pre><code>main.cpp:17: error: `Complex&amp; Complex::operator+(const Complex&amp;, const Complex&amp;)' must take either zero or one argument

main.cpp: In function `Complex&amp; operator+(const Complex&amp;, const Complex&amp;)':
main.cpp:10: error: `double Complex::real' is private
main.cpp:52: error: within this context
main.cpp:10: error: `double Complex::real' is private
main.cpp:52: error: within this context
main.cpp:10: error: `double Complex::real' is private
main.cpp:52: error: within this context
</code></pre>
<p>Ich verstehe ja die Fehlermeldungen, aber im C++ Primer ist auch ein 2ter Operand vorhanden:</p>
<pre><code>Sales_item operator+(const Sales_item&amp;, const Sales_item&amp;);
</code></pre>
<p>Kann mir wer erklären warum das bei mir nicht geht?</p>
<p>Danke im Vorraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/301942/gelöst-probleme-beim-überladen-von-operatoren</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 18:14:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301942.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 07 Apr 2012 16:14:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sat, 07 Apr 2012 18:55:12 GMT]]></title><description><![CDATA[<p>Hallo Comunity!</p>
<p>Ich versuche mich gerade beim Überladen von Operatoren.<br />
Dazu habe ich mir eine Klasse Complex gebaut, um real- und immaginäre Anteile zu addieren.</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

class Complex{

	private:

		double real;
		double imaginary;

	public:

		friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp;, Complex&amp;);
		Complex(double rreal, double iimaginary);
		Complex&amp; operator+(const Complex&amp;,const Complex&amp;);
		Complex&amp; operator=(const Complex&amp;);
		Complex&amp; operator-(const Complex&amp;);
};

int main(int argc, char *argv[])
{

	Complex my_Complex_1(10.0, 11.1);
	Complex my_Complex_2(23.23, 3.232);

	std::cout&lt;&lt;my_Complex_2&lt;&lt;std::endl;

   system(&quot;PAUSE&quot;);
   return EXIT_SUCCESS;
}

Complex::Complex(double rreal, double iimaginary)
	: real(rreal), imaginary(iimaginary){}

std::ostream&amp; operator&lt;&lt;(std::ostream&amp;, Complex&amp; a){

	std::cout&lt;&lt;a.real&lt;&lt;std::endl&lt;&lt;a.imaginary&lt;&lt;std::endl;

}

Complex&amp; operator+(const Complex&amp; a, const Complex&amp; b){

	Complex my_Complex_3(0,0);

	my_Complex_3.real=a.real+b.real;
	my_Complex_3.imaginary=a.imaginary+b.imaginary;

	return my_Complex_3;
}
</code></pre>
<p>Der &lt;&lt; operator funktioniert soweit, aber die Addition lässt er nicht kompilieren.<br />
Fehler:</p>
<pre><code>main.cpp:17: error: `Complex&amp; Complex::operator+(const Complex&amp;, const Complex&amp;)' must take either zero or one argument

main.cpp: In function `Complex&amp; operator+(const Complex&amp;, const Complex&amp;)':
main.cpp:10: error: `double Complex::real' is private
main.cpp:52: error: within this context
main.cpp:10: error: `double Complex::real' is private
main.cpp:52: error: within this context
main.cpp:10: error: `double Complex::real' is private
main.cpp:52: error: within this context
</code></pre>
<p>Ich verstehe ja die Fehlermeldungen, aber im C++ Primer ist auch ein 2ter Operand vorhanden:</p>
<pre><code>Sales_item operator+(const Sales_item&amp;, const Sales_item&amp;);
</code></pre>
<p>Kann mir wer erklären warum das bei mir nicht geht?</p>
<p>Danke im Vorraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199674</guid><dc:creator><![CDATA[Zagatho_zero87]]></dc:creator><pubDate>Sat, 07 Apr 2012 18:55:12 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sat, 07 Apr 2012 16:19:58 GMT]]></title><description><![CDATA[<p>Im Primer steht aber noch ein friend davor, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199676</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sat, 07 Apr 2012 16:19:58 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sat, 07 Apr 2012 16:21:09 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Im Primer steht aber noch ein friend davor, oder?</p>
</blockquote>
<p>Ja aber nur vor ostream und istream.<br />
sonst nirgends.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199677</guid><dc:creator><![CDATA[Zagatho_zero87]]></dc:creator><pubDate>Sat, 07 Apr 2012 16:21:09 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sat, 07 Apr 2012 16:26:05 GMT]]></title><description><![CDATA[<p>Wenn du die Funktionen als Memberfunktionen deklarierst, wird ein this Parameter hinzugefügt.<br />
Dein operator + wird also</p>
<pre><code class="language-cpp">Complex&amp; operator + (Complex* this, const Complex&amp;, const Complex&amp;);
</code></pre>
<p>Was natürlich keinen Sinn macht. Du musst dich zwischen Membern und freien Funktionen entscheiden, wobei ich freien Funktionen hier den Vorzug geben würde. Und operator + gibt kein Complex&amp; sondern ein Complex zurück. (Und dass es std::complex gibt ist dir hoffentlich klar. ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199679</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 07 Apr 2012 16:26:05 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sat, 07 Apr 2012 16:29:45 GMT]]></title><description><![CDATA[<p>Dann ist es wohl ein Fehler. So wie du es in der Klassendefinition geschrieben hst, handelt es sich um ein Memberfunktion. Die Funktionsdefinition ist aber eine freie Funktion. Das passt nicht zusammen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199681</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sat, 07 Apr 2012 16:29:45 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sat, 07 Apr 2012 16:33:19 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Complex&amp; operator + (Complex* this, const Complex&amp;, const Complex&amp;);
</code></pre>
<p>Was natürlich keinen Sinn macht. Du musst dich zwischen Membern und freien Funktionen entscheiden, wobei ich freien Funktionen hier den Vorzug geben würde. Und operator + gibt kein Complex&amp; sondern ein Complex zurück. (Und dass es std::complex gibt ist dir hoffentlich klar. ;))</p>
</blockquote>
<p>Das mit *this wusste ich nicht, darum ist die Funktion im C++Primer außerhalb der Klasse. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Das mit std::Complex wusste ich nicht, danke für die Info.</p>
<p>Vielen Dank cooky451! Sehr hilfreich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199683</guid><dc:creator><![CDATA[Zagatho_zero87]]></dc:creator><pubDate>Sat, 07 Apr 2012 16:33:19 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sat, 07 Apr 2012 16:36:53 GMT]]></title><description><![CDATA[<p>Trotzdem noch eine Frage:</p>
<p>Meine Member sind ja private. Wie kann ich auf diese zugreifen in der operator+()Funktion?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199685</guid><dc:creator><![CDATA[Zagatho_zero87]]></dc:creator><pubDate>Sat, 07 Apr 2012 16:36:53 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sat, 07 Apr 2012 16:41:51 GMT]]></title><description><![CDATA[<p>Zagatho_zero87 schrieb:</p>
<blockquote>
<p>Trotzdem noch eine Frage:</p>
<p>Meine Member sind ja private. Wie kann ich auf diese zugreifen in der operator+()Funktion?</p>
</blockquote>
<p>Vielleicht schaust du im Buch noch mal nach der Erklärung zu friend.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199687</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sat, 07 Apr 2012 16:41:51 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sat, 07 Apr 2012 16:45:07 GMT]]></title><description><![CDATA[<p>Zagatho_zero87 schrieb:</p>
<blockquote>
<p>Meine Member sind ja private. Wie kann ich auf diese zugreifen in der operator+()Funktion?</p>
</blockquote>
<p>So wie du auch sonst zugreifen würdest: Über irgendwelche public Member. Mach dir halt getter. Siehe auch <a href="http://en.cppreference.com/w/cpp/numeric/complex" rel="nofollow">http://en.cppreference.com/w/cpp/numeric/complex</a> daran kannst du dich orientieren.</p>
<p>Edit: Und das mit friend für operator + ist keine gute Idee. Irgendwie willst du ja eh auf die einzelnen Teile zugreifen können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199688</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199688</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 07 Apr 2012 16:45:07 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sat, 07 Apr 2012 16:58:11 GMT]]></title><description><![CDATA[<p>Jetzt steh ich aufm Schlauch...<br />
Würdest du mir das mit den gettern erklären?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199691</guid><dc:creator><![CDATA[Zagatho_zero87]]></dc:creator><pubDate>Sat, 07 Apr 2012 16:58:11 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sat, 07 Apr 2012 17:06:53 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class complex
{
  double real_;
  double imag_;
public:
  complex(double re = 0.0, double im = 0.0)
    : real_(re)
    , imag_(im)
  {}
  double real() const
  {
    return real_;
  }
  double imag() const
  {
    return imag_;
  }
};

complex operator + (const complex&amp; lhs, const complex&amp; rhs)
{
  return complex(...);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2199693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199693</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 07 Apr 2012 17:06:53 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sat, 07 Apr 2012 18:44:29 GMT]]></title><description><![CDATA[<p>33 C:\Dev-Cpp\main.cpp no match for 'operator&lt;&lt;' in '(&amp;std::cout)-&gt;std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt; [with _CharT = char, _Traits = std::char_traits&lt;char&gt;](std::endl [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]) &lt;&lt; operator+(((const Complex&amp;)((const Complex*)(&amp;my_Complex_3))), ((const Complex&amp;)((const Complex*)(&amp;my_Complex_1))))'</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199734</guid><dc:creator><![CDATA[Zagatho_zero87_]]></dc:creator><pubDate>Sat, 07 Apr 2012 18:44:29 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sat, 07 Apr 2012 18:46:00 GMT]]></title><description><![CDATA[<p>Sorry wegen Vorpost.</p>
<p>OK danke erstmal cooky451. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Ich habs jetzt so gemacht (Bitte sofort kritisieren, wenn der Code eurer Meinung nach unschön ist)</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;

class Complex{

	private:

		double real;
		double imaginary;

	public:

		friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp;, Complex&amp;);
		Complex(double rreal, double iimaginary);
		double get_real() const;
		double get_imag() const;
};
		Complex operator+(const Complex&amp;, const Complex&amp;);
		Complex operator-(const Complex&amp;, const Complex&amp;);

int main(int argc, char *argv[])
{

	Complex my_Complex_1(10.0, 11.1);
	Complex my_Complex_2(23.23, 3.232);
	Complex my_Complex_3=my_Complex_1+my_Complex_2;
	Complex my_Complex_4=my_Complex_1-my_Complex_2;

	std::cout&lt;&lt;my_Complex_2&lt;&lt;std::endl;
	std::cout&lt;&lt;my_Complex_1&lt;&lt;std::endl;
	std::cout&lt;&lt;std::endl&lt;&lt;my_Complex_3&lt;&lt;std::endl;
	std::cout&lt;&lt;std::endl&lt;&lt;my_Complex_4&lt;&lt;std::endl;

   system(&quot;PAUSE&quot;);
   return EXIT_SUCCESS;
}

Complex::Complex(double rreal, double iimaginary)
	: real(rreal), imaginary(iimaginary){}

std::ostream&amp; operator&lt;&lt;(std::ostream&amp;, Complex&amp; a){

	std::cout&lt;&lt;a.real&lt;&lt;std::endl&lt;&lt;a.imaginary&lt;&lt;std::endl;

}

Complex operator-(const Complex&amp; a, const Complex&amp; b){

	double lokal_imag_1=a.get_imag();
	double lokal_real_1=a.get_real();
	double lokal_imag_2=b.get_imag();
	double lokal_real_2=b.get_real();

	Complex Complex_sum(lokal_real_1-lokal_real_2, lokal_imag_1-lokal_imag_2);
}

Complex operator+(const Complex&amp; a, const Complex&amp; b){

	double lokal_imag_1=a.get_imag();
	double lokal_real_1=a.get_real();
	double lokal_imag_2=b.get_imag();
	double lokal_real_2=b.get_real();

	Complex Complex_sum((lokal_real_1+lokal_real_2),(lokal_imag_1+lokal_imag_2));
	return Complex_sum;
}

double Complex::get_imag() const{

	return imaginary;
}

double Complex::get_real() const{

	return real;
}
</code></pre>
<p>Die Addition funktioniert. aber... bei der Subtraktion bekomme ich so was raus:<br />
1.#QNAHN<br />
3.343456e+235<br />
Das stimmt natürlich nicht.<br />
1.Warum kommt da so ein Mist heraus?</p>
<p>2. Warum kann ich nicht einfach schreiben:<br />
[cpp]<br />
std::cout&lt;&lt;my_Complex_1+my_Complex_2&lt;&lt;std::endl;</p>
<p>da kommen ganz kryptische Fehlermeldungen.. a la:</p>
<pre><code>33 C:\Dev-Cpp\main.cpp no match for 'operator&lt;&lt;' in '(&amp;std::cout)-&gt;std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt; [with _CharT = char, _Traits = std::char_traits&lt;char&gt;](std::endl [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]) &lt;&lt; operator+(((const Complex&amp;)((const Complex*)(&amp;my_Complex_3))), ((const Complex&amp;)((const Complex*)(&amp;my_Complex_1))))'
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2199735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199735</guid><dc:creator><![CDATA[Zagatho_zero87]]></dc:creator><pubDate>Sat, 07 Apr 2012 18:46:00 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sat, 07 Apr 2012 18:50:14 GMT]]></title><description><![CDATA[<p>Code dazu wäre gut.<br />
Edit: ok, mom.</p>
<p>Das const fehlt da. Sollte std::ostream&amp; operator &lt;&lt; (std::ostream&amp;, const Complex&amp;) heißen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199736</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 07 Apr 2012 18:50:14 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sat, 07 Apr 2012 18:52:05 GMT]]></title><description><![CDATA[<p>Ok danke.</p>
<p>Das Problem mit der Subtraktion hat sich erledigt.<br />
Hatte ein return vergessen bei der Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199741</guid><dc:creator><![CDATA[Zagatho_zero87]]></dc:creator><pubDate>Sat, 07 Apr 2012 18:52:05 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sat, 07 Apr 2012 19:01:14 GMT]]></title><description><![CDATA[<p>zu 1: da fehlt das return bei der Subtraktion <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="😉"
    /><br />
zu 2: du mußt noch die Ausgabe für deine Complex-Klasse definieren, d.h. den Stream-Operator &lt;&lt;:</p>
<pre><code class="language-cpp">ostream&amp; operator &lt;&lt;(ostream&amp; os, const Complex&amp; complex)
{
  return os &lt;&lt; '(' &lt;&lt; complex.get_real() &lt;&lt; '+i' &lt;&lt; complex.get_imag() &lt;&lt; ')';
}
</code></pre>
<p>Edit: ups, jetzt erst sehe ich daß du den Operator ja implementiert hast (bzw. versuchst hast, da so wie cooky451 schreibt, das const fehlt ;-).<br />
Jedoch solltest du dort niemals direkt nach cout schreiben, sondern immer in den übergebenen Stream - falls du mal dies in eine Datei ausgeben willst, würdest du dich wundern!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199743</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sat, 07 Apr 2012 19:01:14 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sun, 08 Apr 2012 09:43:55 GMT]]></title><description><![CDATA[<p>Könnte man es den nicht einfach auch so machen mit dem +-Operator?</p>
<pre><code class="language-cpp">Complex&amp; operator+( const Complex&amp; a )
{
    Complex my_Complex_3( 0,0 );

    my_Complex_3.real = a.real+ this-&gt;a;
    my_Complex_3.imaginary = a.imaginary + this-&gt;b;

    return my_Complex_3;
}
</code></pre>
<p>Würde das nicht auch gehen?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199834</guid><dc:creator><![CDATA[BlauBär]]></dc:creator><pubDate>Sun, 08 Apr 2012 09:43:55 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sun, 08 Apr 2012 10:03:52 GMT]]></title><description><![CDATA[<p>Abgesehen davon, dass du eine Referenz auf ein lokales Objekt zurückgibst:</p>
<p>Das Problem von <code>operator+</code> als Memberfunktion besteht darin, dass die Argumente asymmetrisch behandelt werden. Der linke Operand muss vom Typ <code>Complex</code> sein, während der rechte auch durch implizite Konvertierung zustande kommen kann.</p>
<p>Gerade komplexe Zahlen sind ein gutes Beispiel hierfür, da sich ein Konstruktor</p>
<pre><code class="language-cpp">Complex(double real = 0, double imag = 0);
</code></pre>
<p>anbietet, welcher eine implizite Konvertierung von <code>double</code> -Werten ermöglicht. Wäre <code>operator+</code> ein Member, ergäbe sich folgende Problematik:</p>
<pre><code class="language-cpp">Complex c(1, 2);
double d = 3;

c + d // Funktioniert
d + c // Fehler: Linker Operand muss Klassentyp haben
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2199836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199836</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 08 Apr 2012 10:03:52 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sun, 08 Apr 2012 10:06:12 GMT]]></title><description><![CDATA[<p>Hallo Blaubär!</p>
<p>Ich weiß nicht! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Aber ich habs gestern noch ein bisschen verfeinert, was den Stil angeht und habs so gemacht:</p>
<pre><code class="language-cpp">Complex operator+(const Complex&amp; a, const Complex&amp; b){

	Complex Complex_temp(a.get_real()+b.get_real(), a.get_imag()+b.get_imag());

	return Complex_temp;
}

Complex operator-(const Complex&amp; a, const Complex&amp; b){

	Complex Complex_temp(a.get_real()-b.get_real(), a.get_imag()-b.get_imag());

	return Complex_temp;
</code></pre>
<p>Wobei ich deine Lösung auch interessant finde. Werd ich gleich mal ausprobieren.</p>
<p>Danke. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2199837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199837</guid><dc:creator><![CDATA[Zagatho_zero87]]></dc:creator><pubDate>Sun, 08 Apr 2012 10:06:12 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sun, 08 Apr 2012 10:10:09 GMT]]></title><description><![CDATA[<p>Ok, danke. Ich habe aber noch eine kleinen Fehler gemacht. Es muss natürlich this-&gt;real und this-&gt;imaginary heißten.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199838</guid><dc:creator><![CDATA[BlauBär]]></dc:creator><pubDate>Sun, 08 Apr 2012 10:10:09 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sun, 08 Apr 2012 11:39:49 GMT]]></title><description><![CDATA[<p>Zagatho_zero87 schrieb:</p>
<blockquote>
<p>Wobei ich deine Lösung auch interessant finde. Werd ich gleich mal ausprobieren.</p>
</blockquote>
<p>Und dann liest du noch mal schnell den Beitrag von Nexus.<br />
Und deine temp-Variablen sind auch, na ja, zumindest Ansichtssache. Zugegeben, für das Kompilat wird das keinen Unterschied machen, aber Übersichtlicher wird das dadurch jetzt nicht gerade, oder? :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199859</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sun, 08 Apr 2012 11:39:49 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sun, 08 Apr 2012 11:45:40 GMT]]></title><description><![CDATA[<p>Ja übersichtlicher nicht, das stimmt.<br />
Was gefällt dir besser:<br />
Dies</p>
<pre><code class="language-cpp">Complex operator-(const Complex&amp; a, const Complex&amp; b){

    Complex Complex_temp(a.get_real()-b.get_real(), a.get_imag()-b.get_imag());

    return Complex_temp; 
}
</code></pre>
<p>oder das</p>
<pre><code class="language-cpp">Complex operator-(const Complex&amp; a, const Complex&amp; b){

    double lokal_imag_1=a.get_imag();
    double lokal_real_1=a.get_real();
    double lokal_imag_2=b.get_imag();
    double lokal_real_2=b.get_real();

    Complex Complex_sum(lokal_real_1-lokal_real_2, lokal_imag_1-lokal_imag_2);

    return Complex_sum;
}
</code></pre>
<p>Da die Summenbildung Complex_sum(...) ist in beiden Fällen ca. gleich lang. Aber es fallen die lokalen Variablen weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199862</guid><dc:creator><![CDATA[Zagatho_zero87]]></dc:creator><pubDate>Sun, 08 Apr 2012 11:45:40 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sun, 08 Apr 2012 11:53:14 GMT]]></title><description><![CDATA[<p>Beide doof. Diese beiden Varianten würden für mich infrage kommen: (solche lokalen Variablen werden natürlich eh wegoptimiert, das was rauskommt ist also das Gleiche.)</p>
<pre><code class="language-cpp">Complex operator - (const Complex&amp; lhs, const Complex&amp; rhs)
{
  return Complex(lhs.real() - rhs.real(), lhs.imag() - rhs.imag());
}

Complex operator - (const Complex&amp; lhs, const Complex&amp; rhs)
{
  double real = lhs.real() - rhs.real();
  double imag = lhs.imag() - rhs.imag();
  return Complex(real, imag);
}
</code></pre>
<p>Aber da kommen wir doch langsam in einen Stilbereich der kaum noch sachlich diskutiert werden kann, insofern mach halt was dir Spaß macht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199864</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sun, 08 Apr 2012 11:53:14 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sun, 08 Apr 2012 12:01:27 GMT]]></title><description><![CDATA[<p>OK diese beiden gefallen mir auch besser <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 />
Warum ich oft nacht dem Stil frage ist, weil ich mit dem Buch C von A bis Z gelernt habe (ca. 3-4 Monate) und dann auf C++ umgestiegen bin (C++Primer und Die C++ Programmiersprache) und ich IMHO immer noch den Stil von C von A bis Z mitschleppe. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199867</guid><dc:creator><![CDATA[Zagatho_zero87]]></dc:creator><pubDate>Sun, 08 Apr 2012 12:01:27 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sun, 08 Apr 2012 13:14:28 GMT]]></title><description><![CDATA[<p>Sehr hilfreicher Thread, danke.<br />
Jedoch verstehe ich die Operationsüberladung des &lt;&lt;-Operators nicht.</p>
<pre><code class="language-cpp">ostream&amp; operator &lt;&lt;( std::ostream&amp; os, const Vec&amp; data )
{
	return os &lt;&lt; data.x1;
}
</code></pre>
<p>Warum muss std::ostream&amp; os als Parameter mit dazu? Ich würde mich über eine Erklärung sehr freuen.</p>
<p>MfG yihaaa</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199899</guid><dc:creator><![CDATA[yihaaa]]></dc:creator><pubDate>Sun, 08 Apr 2012 13:14:28 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst] Probleme beim Überladen von Operatoren on Sun, 08 Apr 2012 13:16:20 GMT]]></title><description><![CDATA[<p>yihaaa schrieb:</p>
<blockquote>
<p>Warum muss std::ostream&amp; os als Parameter mit dazu? Ich würde mich über eine Erklärung sehr freuen.</p>
</blockquote>
<p>Weil da reingeschrieben wird? <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/2199900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199900</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sun, 08 Apr 2012 13:16:20 GMT</pubDate></item></channel></rss>