<?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 [] überladen]]></title><description><![CDATA[<p>Hallo, ich habe folgende Aufgabe:</p>
<p>1. Programmieren Sie eine Klasse point2D für zweidimensionale Punkte<br />
1.1. Definieren Sie die Membervariablen als private<br />
1.2. Definieren Sie Konstruktoren und wenn nötig einen Destruktor<br />
1.3. Definieren Sie Funktionen, um auf die Membervariablen zuzugreifen<br />
* Konstant<br />
* Veränderlich<br />
2. Definieren Sie eine Klasse triangle2D für Dreiecke in 2D<br />
2.1. Nutzen Sie die Klasse point2D<br />
2.2. Definieren Sie Konstruktoren und wenn nötig einen Destruktor<br />
2.3. Definieren Sie den operator[], um auf die Punkte zuzugreifen<br />
* Konstant<br />
* Veränderlich<br />
2.4. Definieren Sie Memberfunktionen zum Berechnen<br />
* Des Umfangs<br />
* Der Fläche</p>
<p>Nun weiß ich allerdings nicht genau, wie ich den operator[] überladen soll.<br />
Mein bisheriges Programm sieht so aus:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;

class point2D {
	private:
		float x,y;

	public:
		point(float xx=0,float yy=0):x(xx), y(yy) {}
		float getx() {return x}
		float gety() {return y}
};

class triangle2D {
	private:
		point2D A;
		point2D B;
		point2D C;
	public:
		triangle2D (point A, point B, point C) : A(A), B(B), C(C) {}
		friend point2D operator[] (const point2D&amp; A);
		friend point2D operator[] (point2D&amp; A);
		void perimeter(point2D A, point2D B, point2D C);
		void area(point2D A, point2D B, point2D C);
};

point2D operator[](const point2D&amp; A) {
</code></pre>
<p><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="😕"
    /> <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="😕"
    /> <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/topic/258642/operator-überladen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 04:56:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/258642.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 13 Jan 2010 10:26:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operator [] überladen on Wed, 13 Jan 2010 10:26:47 GMT]]></title><description><![CDATA[<p>Hallo, ich habe folgende Aufgabe:</p>
<p>1. Programmieren Sie eine Klasse point2D für zweidimensionale Punkte<br />
1.1. Definieren Sie die Membervariablen als private<br />
1.2. Definieren Sie Konstruktoren und wenn nötig einen Destruktor<br />
1.3. Definieren Sie Funktionen, um auf die Membervariablen zuzugreifen<br />
* Konstant<br />
* Veränderlich<br />
2. Definieren Sie eine Klasse triangle2D für Dreiecke in 2D<br />
2.1. Nutzen Sie die Klasse point2D<br />
2.2. Definieren Sie Konstruktoren und wenn nötig einen Destruktor<br />
2.3. Definieren Sie den operator[], um auf die Punkte zuzugreifen<br />
* Konstant<br />
* Veränderlich<br />
2.4. Definieren Sie Memberfunktionen zum Berechnen<br />
* Des Umfangs<br />
* Der Fläche</p>
<p>Nun weiß ich allerdings nicht genau, wie ich den operator[] überladen soll.<br />
Mein bisheriges Programm sieht so aus:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;

class point2D {
	private:
		float x,y;

	public:
		point(float xx=0,float yy=0):x(xx), y(yy) {}
		float getx() {return x}
		float gety() {return y}
};

class triangle2D {
	private:
		point2D A;
		point2D B;
		point2D C;
	public:
		triangle2D (point A, point B, point C) : A(A), B(B), C(C) {}
		friend point2D operator[] (const point2D&amp; A);
		friend point2D operator[] (point2D&amp; A);
		void perimeter(point2D A, point2D B, point2D C);
		void area(point2D A, point2D B, point2D C);
};

point2D operator[](const point2D&amp; A) {
</code></pre>
<p><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="😕"
    /> <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="😕"
    /> <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/1838031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1838031</guid><dc:creator><![CDATA[cppbeginner]]></dc:creator><pubDate>Wed, 13 Jan 2010 10:26:47 GMT</pubDate></item><item><title><![CDATA[Reply to Operator [] überladen on Wed, 13 Jan 2010 10:38:12 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class triangle2d {
/** ---*/
public:
    const point2d&amp; operator[]( int index ) const
    {
        /** return point at index */
    }
};
</code></pre>
<p>Du kannst auch eine Nonconst-Version anbieten, die eine nonconst-Referenz zurückgibt. Würde ich aber lassen, da dadurch eine gute Portion Kapselung flöten geht.</p>
<p>Außerdem:</p>
<blockquote>
<p>1. Programmieren Sie eine Klasse point2D für <strong>zweidimensionale Punkte</strong></p>
</blockquote>
<p>Punkte selber haben keine Ausdehnung, darum gibt es auch keine zweidimensionalen Punkte.<br />
Es gibt aber Punkte im zweidimensionalen Raum <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/1838037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1838037</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Wed, 13 Jan 2010 10:38:12 GMT</pubDate></item><item><title><![CDATA[Reply to Operator [] überladen on Wed, 13 Jan 2010 10:52:04 GMT]]></title><description><![CDATA[<p>Ich muss leider eingestehen, dass ich das jetzt noch nicht ganz verstanden habe.<br />
Was würde denn bei einer Eingabe von [2] zurückgegeben werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1838044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1838044</guid><dc:creator><![CDATA[cppbeginner]]></dc:creator><pubDate>Wed, 13 Jan 2010 10:52:04 GMT</pubDate></item><item><title><![CDATA[Reply to Operator [] überladen on Wed, 13 Jan 2010 11:02:19 GMT]]></title><description><![CDATA[<p>Du hast bei einem Dreieck 3 Punkte.<br />
1.Punkt: triangle[0]<br />
2.Punkt: triangle[1]<br />
3.Punkt: triangle[2]<br />
Du hast deine drei Punkte in drei verschieden Variablen gepackt.<br />
Du kannst jetzt für index=0 Punkt A zurückgeben usw.<br />
Oder du packst die 3 Punkte in array:</p>
<pre><code class="language-cpp">class Triangle2D {
    Point2D points[3];
};
</code></pre>
<p>Dann könnte operator[] so ausschauen:</p>
<pre><code class="language-cpp">const Point2D&amp; Triangle2D::operator[]( int index ) const
{
    assert(index &lt; 3);
    // Oder einen out_of_bounds-Exception werfen
    // Oder den Index %3 nehmen
    // Oder bei index &gt;2 immer points[2] zurückgeben
    // Such dir das Verhalten aus, das für dich am besten passt
    return points[index];
}
</code></pre>
<p>// edit:<br />
Achja: ganz vergessen:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-232010.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-232010.html</a><br />
Durchlesen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1838047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1838047</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Wed, 13 Jan 2010 11:02:19 GMT</pubDate></item><item><title><![CDATA[Reply to Operator [] überladen on Wed, 13 Jan 2010 11:02:50 GMT]]></title><description><![CDATA[<p>cppbeginner schrieb:</p>
<blockquote>
<p>Was würde denn bei einer Eingabe von [2] zurückgegeben werden?</p>
</blockquote>
<p>Normalerweise gibt ein op[] bei einer Liste von Elementen das n-te Element zurück wenn er mit <code>[n]</code> aufgerufen wird. Bei einem N-eck würde ich daher davon ausgehen, dass der op[], aufgerufen mit den Werten 0, 1,..., N-1 den jeweiligen Eckpunkt zurückgibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1838049</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1838049</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 13 Jan 2010 11:02:50 GMT</pubDate></item><item><title><![CDATA[Reply to Operator [] überladen on Wed, 13 Jan 2010 12:05:15 GMT]]></title><description><![CDATA[<p><strong>1. Const-Correctness</strong></p>
<p>Grundsätzlich sollten Methoden, welche das Objekt nicht ändern, als const bezeichnet werden. Am obigen Beispiel:</p>
<pre><code class="language-cpp">class point2D {
// ...   
        float getx() const {return x};
        // statt: float getx() {return x}
        float gety() const {return y}
        // statt: float gety() {return y}
// ...
};
</code></pre>
<p><strong>2. operator[]</strong></p>
<p>Die Methode X operator[](Y) tut genau das, was man ihr aufgibt.</p>
<p>Grundsätzlich sollte sie was zurückgeben (X). Operatoren kann man grob gesagt mit allen möglichen Funktionalitäten überladen (so geschehen auch bei std::cout &lt;&lt; ...).</p>
<p>Man kann Operatoren auch direkt aufrufen:</p>
<pre><code class="language-cpp">foo[14]
// entspricht dem Aufruf:
foo.operator[](14);
// oder ...
foo += bar;
// entspricht:
foo.operator+=(bar);
</code></pre>
<p>Globale Operatorüberladung funktioniert ähnlich. Da ich gerade aber sehe, dass l'abra d'or bereits ausführlich geantwortet hat, verweise ich mal darauf.</p>
<p><strong>3. Kapselung (Off-Topic)</strong></p>
<blockquote>
<p>Du kannst auch eine Nonconst-Version anbieten, die eine nonconst-Referenz zurückgibt. Würde ich aber lassen, da dadurch eine gute Portion Kapselung flöten geht.</p>
</blockquote>
<p>Auf die Gefahr hin, dass ich jetzt einen Nebenschauplatz eröffne, aber insbesondere die Klasse <em>point2D</em> lässt eine Notwendigkeit eine Kapselung -- meiner Meinung nach -- nicht erkennen.</p>
<p>Im Grunde könnte man alle Attribute genauso <em>public</em> deklarieren, auch wenn es der Aufgabenstellung mit den entsprechenden Zugriffsmethoden widerspricht.</p>
<p>Es ist wesentlich intuitiver die Attribute zum Teil des Interfaces werden zu lassen. Der Gefahr Inkonsistenzen zu erzeugen, setzt man sich hier nicht aus.</p>
<pre><code class="language-cpp">#if !defined(CPPDE_POINT2D_H__INCLUDED)
#define CPPDE_POINT2D_H__INCLUDED

struct Point2D
{
    float x;
    float y;

    explicit Point2D(float x = 0.f, float y = 0.f)
        : x(x), y(y)
        { }
};

#endif
</code></pre>
<pre><code class="language-cpp">Point2d p;
p.x = 1.0
std::cout &lt;&lt; p.y &lt;&lt; std::endl;
</code></pre>
<p>Grüße ... Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1838076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1838076</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Wed, 13 Jan 2010 12:05:15 GMT</pubDate></item><item><title><![CDATA[Reply to Operator [] überladen on Wed, 13 Jan 2010 12:22:27 GMT]]></title><description><![CDATA[<p>bwbg schrieb:</p>
<blockquote>
<blockquote>
<p>Du kannst auch eine Nonconst-Version anbieten, die eine nonconst-Referenz zurückgibt. Würde ich aber lassen, da dadurch eine gute Portion Kapselung flöten geht.</p>
</blockquote>
<p>Auf die Gefahr hin, dass ich jetzt einen Nebenschauplatz eröffne, aber insbesondere die Klasse <em>point2D</em> lässt eine Notwendigkeit eine Kapselung -- meiner Meinung nach -- nicht erkennen.</p>
</blockquote>
<p>Aber wir wollen den operator[] ja nicht für Point2D sondern für Triangle2D.<br />
Und da muss man sich das genauer überlegen, ob man den Point wirklich per non-const-Referenz zurückgeben will, und damit ein Verändern des Punktes hinter dem Rücken von Triangle2D erlauben.<br />
Z.B. wenn man einen Punkt im Dreieck verändern will, kann das im setter mehrere Nebeneffekte haben:<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="😉"
    /> zuerst prüfen, ob der zu setzende Punkt nicht mit einem der beiden anderen identisch ist (Resultat wäre eine Gerade, komisches Verhalten wäre die Folge, k.A. ob man das will)<br />
-&gt; Punkt wird NICHT gesetzt!<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="😉"
    /> Fläche aktualisieren und cachen.<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="😉"
    /> usw. (ist sicher nicht soo gut noch mehr Nebeneffekte zuhaben, aber möglich ist es...)<br />
All das hintergeht man, wenn man dem operator[] eine nicht-const-Referenz zurückgeben lässt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1838104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1838104</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Wed, 13 Jan 2010 12:22:27 GMT</pubDate></item><item><title><![CDATA[Reply to Operator [] überladen on Wed, 13 Jan 2010 13:39:47 GMT]]></title><description><![CDATA[<p>Also ich komme mit dem ganzen zeug hier einfach nicht zurecht. Mein Programm sieht jetzt momentan so aus:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
using namespace std;

class point2D {
	private:
		float x,y;

	public:
		point2D(float xx=0,float yy=0):x(xx), y(yy) {}
		float getx() const {return x;}
		float gety() const {return y;}
};

class triangle2D {
	private:
		point2D A;
		point2D B;
		point2D C;
	public:
		triangle2D (point2D A, point2D B, point2D C) : A(A),B(B),C(C) {}
		friend const point2D operator[](int index) const;
		void perimeter(point2D points);
		void area(point2D points);
};

const point2D&amp; operator[](int index) const{
	assert (index&lt;3);
	if (index==0) return A;
	else if (index==1) return B;
	else if (index==2) return C;
}
</code></pre>
<p>Aber wenn ich das kompaliere kommen folgende Fehlermeldungen mit denen ich nix anfangen kann:</p>
<p>triangle2D.cpp:21: Fehler: non-Elementfunktion »const point2D operator[](int)« kann nicht CV-Qualifizierer haben<br />
triangle2D.cpp:21: Fehler: »const point2D operator[](int)« muss eine nichtstatische Elementfunktion sein<br />
triangle2D.cpp:26: Fehler: non-Elementfunktion »const point2D&amp; operator[](int)« kann nicht CV-Qualifizierer haben<br />
triangle2D.cpp:26: Fehler: »const point2D&amp; operator[](int)« muss eine nichtstatische Elementfunktion sein</p>
<p>Kann sein das mein Programm auch volkommen falsch ist, aber ich steig einfach nicht wirklich dahinter. <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="😕"
    /> <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/1838147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1838147</guid><dc:creator><![CDATA[cppbeginner]]></dc:creator><pubDate>Wed, 13 Jan 2010 13:39:47 GMT</pubDate></item><item><title><![CDATA[Reply to Operator [] überladen on Wed, 13 Jan 2010 13:45:17 GMT]]></title><description><![CDATA[<p>was hat die freie funktion da zu suchen? vermutlich willst du eher den op[] implementieren, was eigentlich in die .cpp-datei gehört, und wofür dann der Qualifizierer fehlt:</p>
<pre><code class="language-cpp">const point2D&amp; triangle2D::operator[](int index) const{  //&lt;&lt;triangle2D fehlte!
    assert (index&lt;3);
    if (index==0) return A;
    else if (index==1) return B;
    else if (index==2) return C;
}
</code></pre>
<p>operator[] ist eine Memberfunktion wie jede andere auch, nur der Name sieht etwas anders aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1838153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1838153</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 13 Jan 2010 13:45:17 GMT</pubDate></item><item><title><![CDATA[Reply to Operator [] überladen on Wed, 13 Jan 2010 13:54:50 GMT]]></title><description><![CDATA[<p>Ok, jetzt habe ich es so geändert wie du gesagt hat, aber jetzt meckert er gerade rum, weil das triangle2D da steht.</p>
<pre><code class="language-cpp">class triangle2D {
	private:
		point2D A;
		point2D B;
		point2D C;
	public:
		triangle2D (point2D A, point2D B, point2D C) : A(A),B(B),C(C) {}
		const point2D&amp; triangle2D::operator[](int index) const {
			assert(index&lt;3);
			if (index==0) return A;
			else if (index==1) return B;
			else if (index==2) return C;
		}
		void perimeter(point2D points);
		void area(point2D points);
};
</code></pre>
<p>Fehler:<br />
triangle2D.cpp:21: Fehler: zusätzliche Qualifizierung »triangle2D::« an Element »operator[]«</p>
<p>Tut mir leid falls das alles dumme Fragen sind <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1838162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1838162</guid><dc:creator><![CDATA[cppbeginner]]></dc:creator><pubDate>Wed, 13 Jan 2010 13:54:50 GMT</pubDate></item><item><title><![CDATA[Reply to Operator [] überladen on Wed, 13 Jan 2010 13:59:42 GMT]]></title><description><![CDATA[<p>cppbeginner schrieb:</p>
<blockquote>
<p>Ok, jetzt habe ich es so geändert wie du gesagt hat, aber jetzt meckert er gerade rum, weil das triangle2D da steht.</p>
</blockquote>
<p>Du hast es nicht so geändert <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="😃"
    /><br />
operator[]() soll eine Member-FUnktion werden. Wie du normale Member-Funktionen deklarierst weißt du ja. Nämlich OHNE dem Klassen-Qualifizierer.<br />
Den brauchst du aber, wenn du die Funktion definierst (die Implementierung), wenn diese außerhalb der Klassendefinition geschehen soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1838166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1838166</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Wed, 13 Jan 2010 13:59:42 GMT</pubDate></item><item><title><![CDATA[Reply to Operator [] überladen on Wed, 13 Jan 2010 14:09:05 GMT]]></title><description><![CDATA[<p>Aha. Ok, dass hab ich jetzt glaub ich gerafft <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /><br />
Vielen Dank für eure Hilfe und für eure Geduld!!!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1838176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1838176</guid><dc:creator><![CDATA[cppbeginner]]></dc:creator><pubDate>Wed, 13 Jan 2010 14:09:05 GMT</pubDate></item><item><title><![CDATA[Reply to Operator [] überladen on Wed, 13 Jan 2010 15:07:02 GMT]]></title><description><![CDATA[<p>Hier bin ich doch noch mal <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>
<p>Wenn ich, wie in der Aufgabe gefordert, den Operator[] noch mal veränderlich mache, dann muss ich den einfach noch mal überladen und lasse aber das const weg oder?</p>
<p>Dann noch eine andere Frage. Kann ich den Operator jetzt auch sinnvoll nutzen um Fläche und Umfang auszurechnen?<br />
Ich habe den nicht mehr verwendet, sondern das wie folgt gemacht:</p>
<pre><code class="language-cpp">float point2D::distance(point2D A) {
	return sqrt((A.getx()-x)*(A.getx()-x)+(A.gety()-y)*(A.gety()-y));
}
void triangle2D::perimeter() {
	float perimeter=A.distance(B)+B.distance(C)+A.distance(C);
	cout&lt;&lt;&quot;The perimeter of Triangle ABC is: &quot;&lt;&lt; perimeter &lt;&lt;endl;;
}

void triangle2D::area() {
	float gamma=acos((B.distance(C)*B.distance(C)+A.distance(C)*A.distance(C)-A.distance(B)*A.distance(B))/(2*B.distance(C)*A.distance(C)));
	float area=B.distance(C)*A.distance(C)*sin(gamma)/2;
	cout&lt;&lt;&quot;The area of Triangle ABC is: &quot;&lt;&lt;area&lt;&lt;endl;
}
</code></pre>
<p>Mir leuchtet aber auch nicht ganz ein, wie ich das mit dem [] besser einbringen könnte, so dass eine effektivere Lösung dabei herauskommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1838220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1838220</guid><dc:creator><![CDATA[cppbeginner]]></dc:creator><pubDate>Wed, 13 Jan 2010 15:07:02 GMT</pubDate></item><item><title><![CDATA[Reply to Operator [] überladen on Wed, 13 Jan 2010 15:08:16 GMT]]></title><description><![CDATA[<p>cppbeginner schrieb:</p>
<blockquote>
<p>Mir leuchtet aber auch nicht ganz ein, wie ich das mit dem [] besser einbringen könnte, so dass eine effektivere Lösung dabei herauskommt.</p>
</blockquote>
<p>Garnicht. Wenn du perimeter und area als Methoden der Klasse machen sollst ist das ok so. Wenn du allerdings ne freie Funktion draus machen sollst die jeweils nur ein Dreieck als Argument bekommst dann musst du halt den op[] benutzen um die Eck-Koordinaten zu bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1838222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1838222</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 13 Jan 2010 15:08:16 GMT</pubDate></item><item><title><![CDATA[Reply to Operator [] überladen on Wed, 13 Jan 2010 15:23:13 GMT]]></title><description><![CDATA[<p>Alles klar. Vielen Dank <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/1838233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1838233</guid><dc:creator><![CDATA[cppbeginner]]></dc:creator><pubDate>Wed, 13 Jan 2010 15:23:13 GMT</pubDate></item></channel></rss>