<?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[Operator überladung bei 2D Vektroren]]></title><description><![CDATA[<p>PROBLEM GELÖST: Habe jetzt den korrekten Code runtergeschrieben.</p>
<p>Hi ich wollte mal fragen, ob mir jemand helfen kann eine Operator Überladung der<br />
Addition operator+ hier für diese Klasse 2Dvec durchzuführen.<br />
Irgendwie werde ich nicht schlau, wie ganau das Funktioniert.</p>
<p>Hier mein Versuch:</p>
<pre><code class="language-cpp">vec2D operator+ (const vec2D &amp;v){
    vec2D sum;
    sum.x1 = x1 + v.x1;
    sum.x2 = x2 + v.x2;
    return sum;
  }
</code></pre>
<p>Habe ich vielleicht einen Fehler in meiner Klasse(siehe unten)?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

//Class 2Dvec=2DimensionalVector
class vec2D{
public:
  //default constructor sets x1=x2=0.0
  vec2D();     
  //initialisation constructor sets x1=X1 and x2=X2
  vec2D(double X1, double X2);    
  //sets x1=X1 and x2=X2
  void setVec(double X1, double X2);
  //cout coordinatres
  void showX1X2();
  //Here i want to create a vector operator v1+v2
  vec2D operator+ (const vec2D &amp;v){
    vec2D sum;
    sum.x1 = x1 + v.x1;
    sum.x2 = x2 + v.x2;
    return sum;
  }
  void operator&lt;&lt; (const vec2D &amp;v1){
    std::cout &lt;&lt; &quot;( &quot; &lt;&lt; v1.x1 &lt;&lt; &quot; | &quot; &lt;&lt; v1.x2 &lt;&lt; &quot; )\n&quot;;
    }   

private:
  //x1 and x2 are coordinates of the 2Dvectors      
  double x1;
  double x2;                 

};

//default constructor sets x1=x2=0.0
vec2D::vec2D(){
  x1 = 0.0; x2 = 0.0;
  }             

//initialisation constructor sets x1=X1 and x2=X2
vec2D::vec2D(double X1, double X2){
  //using method setVec to set values
  setVec(X1, X2);
  } 

//sets x1=X1 and x2=X2  
void vec2D::setVec(double X1, double X2){
  x1 = X1; x2 = X2;   
  }

//cout coordinatres
void vec2D::showX1X2(){
  std::cout &lt;&lt; &quot;( &quot; &lt;&lt; x1 &lt;&lt; &quot; | &quot; &lt;&lt; x2 &lt;&lt; &quot; )&quot; &lt;&lt; std::endl;
  }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/284626/operator-überladung-bei-2d-vektroren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 22:12:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284626.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Apr 2011 09:34:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operator überladung bei 2D Vektroren on Tue, 05 Apr 2011 10:33:43 GMT]]></title><description><![CDATA[<p>PROBLEM GELÖST: Habe jetzt den korrekten Code runtergeschrieben.</p>
<p>Hi ich wollte mal fragen, ob mir jemand helfen kann eine Operator Überladung der<br />
Addition operator+ hier für diese Klasse 2Dvec durchzuführen.<br />
Irgendwie werde ich nicht schlau, wie ganau das Funktioniert.</p>
<p>Hier mein Versuch:</p>
<pre><code class="language-cpp">vec2D operator+ (const vec2D &amp;v){
    vec2D sum;
    sum.x1 = x1 + v.x1;
    sum.x2 = x2 + v.x2;
    return sum;
  }
</code></pre>
<p>Habe ich vielleicht einen Fehler in meiner Klasse(siehe unten)?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

//Class 2Dvec=2DimensionalVector
class vec2D{
public:
  //default constructor sets x1=x2=0.0
  vec2D();     
  //initialisation constructor sets x1=X1 and x2=X2
  vec2D(double X1, double X2);    
  //sets x1=X1 and x2=X2
  void setVec(double X1, double X2);
  //cout coordinatres
  void showX1X2();
  //Here i want to create a vector operator v1+v2
  vec2D operator+ (const vec2D &amp;v){
    vec2D sum;
    sum.x1 = x1 + v.x1;
    sum.x2 = x2 + v.x2;
    return sum;
  }
  void operator&lt;&lt; (const vec2D &amp;v1){
    std::cout &lt;&lt; &quot;( &quot; &lt;&lt; v1.x1 &lt;&lt; &quot; | &quot; &lt;&lt; v1.x2 &lt;&lt; &quot; )\n&quot;;
    }   

private:
  //x1 and x2 are coordinates of the 2Dvectors      
  double x1;
  double x2;                 

};

//default constructor sets x1=x2=0.0
vec2D::vec2D(){
  x1 = 0.0; x2 = 0.0;
  }             

//initialisation constructor sets x1=X1 and x2=X2
vec2D::vec2D(double X1, double X2){
  //using method setVec to set values
  setVec(X1, X2);
  } 

//sets x1=X1 and x2=X2  
void vec2D::setVec(double X1, double X2){
  x1 = X1; x2 = X2;   
  }

//cout coordinatres
void vec2D::showX1X2(){
  std::cout &lt;&lt; &quot;( &quot; &lt;&lt; x1 &lt;&lt; &quot; | &quot; &lt;&lt; x2 &lt;&lt; &quot; )&quot; &lt;&lt; std::endl;
  }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2044827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044827</guid><dc:creator><![CDATA[DaNewGuy]]></dc:creator><pubDate>Tue, 05 Apr 2011 10:33:43 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladung bei 2D Vektroren on Tue, 05 Apr 2011 09:49:48 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/u14774" rel="nofollow">akari</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/f2" rel="nofollow">VCL (C++ Builder)</a> in das Forum <a href="http://www.c-plusplus.net/forum/f15" rel="nofollow">C++ (auch C++0x)</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044834</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Tue, 05 Apr 2011 09:49:48 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladung bei 2D Vektroren on Tue, 05 Apr 2011 09:54:54 GMT]]></title><description><![CDATA[<p>wo ist denn dein problem?!?</p>
<p>auf den ersten blick sieht das ganze richtig aus...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044838</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 05 Apr 2011 09:54:54 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladung bei 2D Vektroren on Tue, 05 Apr 2011 10:02:47 GMT]]></title><description><![CDATA[<p>Ja das Problem ist, dass mein Compiler Dev-C++ sehr viele Fehler ausspuckt, darum kapiere ich nicht wo der Fehler liegt:(.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044841</guid><dc:creator><![CDATA[DaNewGuy]]></dc:creator><pubDate>Tue, 05 Apr 2011 10:02:47 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladung bei 2D Vektroren on Tue, 05 Apr 2011 10:06:30 GMT]]></title><description><![CDATA[<p>De C++ ist kein Compiler sondern Schrott. Wieso benutzen das eigentlich so viele?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044844</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 05 Apr 2011 10:06:30 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladung bei 2D Vektroren on Tue, 05 Apr 2011 10:07:36 GMT]]></title><description><![CDATA[<p>benenne den 2Dvec doch mal so um, dass das erste Zechen ein Buchstaben ist. Z.B.: Vec2D. In C++ darf kein Name mit einer Ziffer beginnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044846</guid><dc:creator><![CDATA[Werner_logoff]]></dc:creator><pubDate>Tue, 05 Apr 2011 10:07:36 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladung bei 2D Vektroren on Tue, 05 Apr 2011 10:12:17 GMT]]></title><description><![CDATA[<p>Dein Klassenname beginn mit einer Ziffer beginnt, das ist nicht erlaubt.</p>
<p>Binäre Operatoren sollten allerdings als freie Funktionen implementiert werden, weil sie flexibler einzusetzen sind als member Funktionen:</p>
<pre><code class="language-cpp">Vec2D operator+( const Vec2D&amp; op1, const Vec2D&amp; op2 )
{
 ...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2044850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044850</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Tue, 05 Apr 2011 10:12:17 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladung bei 2D Vektroren on Tue, 05 Apr 2011 10:21:55 GMT]]></title><description><![CDATA[<p>Man bin ich ein Vollpfosten:D. Ok mit der umbenennung von 2Dvec zu vec2D hat es geklappt:).</p>
<p>DocShoe schrieb:</p>
<blockquote>
<p>Dein Klassenname beginn mit einer Ziffer beginnt, das ist nicht erlaubt.</p>
<p>Binäre Operatoren sollten allerdings als freie Funktionen implementiert werden, weil sie flexibler einzusetzen sind als member Funktionen:</p>
<pre><code class="language-cpp">Vec2D operator+( const Vec2D&amp; op1, const Vec2D&amp; op2 )
{
 ...
}
</code></pre>
</blockquote>
<p>Wie meinst du das genau? Aber + ist doch nur ein binärer operator und kein tärnärer? Könntest du das ein bisschen besser erklären, evtl. auch mit dem Code?<br />
Und welche vorteile hätte ich durch diese Notation? Ist das schneller? Oder sicherer?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044854</guid><dc:creator><![CDATA[DaNewGuy]]></dc:creator><pubDate>Tue, 05 Apr 2011 10:21:55 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladung bei 2D Vektroren on Tue, 05 Apr 2011 10:31:12 GMT]]></title><description><![CDATA[<p>das ist ganz einfach. bis jetzt deklarierst du die addition als memberfunktion (also innerhalb deiner klasse). nun sollst du ihn ausserhalb deiner klasse deklarieren.</p>
<p>das hat den vorteil, dass die addition kommutativ ist und zur not können casts durchgeführt werden. bei vec1 + vec2 hat das keine probleme...<br />
aber z.b. bei bruchzahlen (im folgenden b1 und b2): hier wäre b1 + b2 kein problem. aber was ist wenn du eine bruchzahl b mit einer ganzen zahl addieren möchtest?!? b + i wäre das, ok. aber was ist nun i + b?<br />
dann müsstest du ja den plus operator von int überschreiben. wenn du nun aber die addition von den bruchzahlen global deklarierst und auch einen konstruktor hast der als argumetn nur einen int erwartet, castet der compiler das implizit und es funktioniert ===&gt; schreibarbeit gespart</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044860</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 05 Apr 2011 10:31:12 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladung bei 2D Vektroren on Tue, 05 Apr 2011 10:47:17 GMT]]></title><description><![CDATA[<p>aber ich habe doch die Koordinaten von vec2D als double deklariert ... wieso sollte ich da bei brüchen oder integers probleme bekommen ...<br />
Sorry aber ich verstehe immer noch nicht worauf du hinaus willst, bin ein programmieranfänger und deswegen ein bisschen langsam:D.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044865</guid><dc:creator><![CDATA[DaNewGuy]]></dc:creator><pubDate>Tue, 05 Apr 2011 10:47:17 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladung bei 2D Vektroren on Tue, 05 Apr 2011 11:00:00 GMT]]></title><description><![CDATA[<p>ok, ich versuchs anders zu erklären. ich greife aber das beispiel der bruchzahlen auf, da es bei dem vector nicht wirklich sinn macht.</p>
<p>also erstmal was mathe:</p>
\begin{math}  
\frac{1}{2} + 1 = \frac{3}{2} = 1,5 = 1 + \frac{1}{2}  
\end{math}
<p>das gilt, wie du wissen solltest. ein-halb plus eins ist gleich eins komma fünf ist gleich eins plus 1-halb (man beachte die kommutativität, also das vertauschen der beiden summanden)</p>
<p>hast du jetzt eine bruchklasse:</p>
<pre><code class="language-cpp">class Bruch
{
    int nenner;
    int zaehler;
public:
    Bruch(int zahler, int nenner = 1)
      : zaehler(zaehler), nenner(nenner)
    { } // sicherheitsfunktionen wie assert lasse ich weg, der nenner könnte nun auch 0 sein!

    Bruch operator+(Bruch const&amp; rhs)
    {
         Bruch tmp(this-&gt;zaehler*rhs.nenner + rhs.zaehler*this-&gt;nenner, 
                   this-&gt;nenner*rhs.nenner); // bruch addition
         return tmp;
    }
};

int main()
{
    Bruch a(1, 2);
    Bruch b(1); // durch default parameter auf 1/1 gesetzt
    Bruch ergebnis = a + b;  // -&gt; 1/2 + 1 = 3/2 = 1,5  ok!
    Bruch ergebnis2 = b + a; // auch noch ok, weil a und b Bruch instanzen sind
    Bruchergebnis3 = a + 1; // ok, da 1 wegen dem konstruktor implizit zu einem bruch gecastet werden kann
    Bruch ergebnis4 = 1 + a; // FALSCH! trotz der + operator überladung

    return 0;
}
</code></pre>
<p>umgehen kann man dies durch folgendes:</p>
<pre><code class="language-cpp">class Bruch
{
    // ... wie oben alles
    friend Bruch operator+(Bruch const&amp; a, Bruch const&amp; b);
};

Bruch operator+(Bruch const&amp; a, Bruch const&amp; b)
{
    Bruch tmp(a.zaehler*b.nenner + b.zaehler*a.nenner, a.nenner*b.nenner);
    return tmp;
}

int main()
{
    // .. wie oben, nun funktioniert ergbenis4 jedoch
}
</code></pre>
<p>verstanden soweit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044884</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 05 Apr 2011 11:00:00 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladung bei 2D Vektroren on Tue, 05 Apr 2011 11:36:26 GMT]]></title><description><![CDATA[<p>ah jetzt kapiere ich was du sagst:).<br />
Der vec2D operator+ (const &amp;v1) ist also nicht vollkommen kommutativ ...</p>
<p>Aber was genau bedeutet denn der Schlüsselbegriff friend?</p>
<pre><code class="language-cpp">friend Bruch operator+(Bruch const&amp; a, Bruch const&amp; b);
</code></pre>
<p>ich kenne nur public, private und protected(obwohl ich den unterschied zu private nicht ganz verstehe:D)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044911</guid><dc:creator><![CDATA[DaNewGuy]]></dc:creator><pubDate>Tue, 05 Apr 2011 11:36:26 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladung bei 2D Vektroren on Tue, 05 Apr 2011 12:37:23 GMT]]></title><description><![CDATA[<p>DaNewGuy schrieb:</p>
<blockquote>
<p>Aber was genau bedeutet denn der Schlüsselbegriff friend?</p>
</blockquote>
<p>friend bedeutet, dass das, was da als &quot;Freund&quot; deklariert wird, zwar (syntaktisch) nicht zur Klasse gehört, aber dennoch Zugriff auf die privaten Member hat. Das sollte aber auch im Einführungsbuch deiner Wahl stehen.</p>
<blockquote>
<p>C++ - where friends can touch your privates, but your family can't.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2044943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044943</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 05 Apr 2011 12:37:23 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladung bei 2D Vektroren on Tue, 05 Apr 2011 16:09:54 GMT]]></title><description><![CDATA[<p>DaNewGuy schrieb:</p>
<blockquote>
<p>ich kenne nur public, private und protected(obwohl ich den unterschied zu private nicht ganz verstehe:D)</p>
</blockquote>
<p>Nur der Vollständigkeit halber: Dieser Unterschied wird erst relevant, wenn du dich mit Vererbung beschäftigst - protected-Elemente dürfen von den eigenen Methoden, Freunden <em>und den Methoden abgeleiteter Klassen</em> verwendet werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045051</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 05 Apr 2011 16:09:54 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladung bei 2D Vektroren on Tue, 05 Apr 2011 17:54:40 GMT]]></title><description><![CDATA[<p>Wobei protected immer nur für this gilt, die Variablen und Methoden anderer Instanzen sind trotzdem private.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045099</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 05 Apr 2011 17:54:40 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladung bei 2D Vektroren on Tue, 05 Apr 2011 19:13:41 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<blockquote>
<p>C++ - where friends can touch your privates, but your family can't.</p>
</blockquote>
</blockquote>
<p><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="😃"
    /> Ich habe eine neue Signatur.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045145</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Tue, 05 Apr 2011 19:13:41 GMT</pubDate></item></channel></rss>