<?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 &amp;lt; und &amp;gt; überladen]]></title><description><![CDATA[<p>tach auch.<br />
ich wollte mal zur übung versuchen die vergleichsoperatoren &lt; und &gt; zu überladen<br />
für meine klasse &quot;Rectangle&quot;.</p>
<p>rectangle.h:</p>
<pre><code class="language-cpp">class Rectangle
{
private:
	double length;
	double width;
	double area;
public:
	Rectangle();
	Rectangle(double lgth, double wdth) {computeArea();};
	Rectangle(double ar);
	~Rectangle();
	void computeArea();
	bool operator&gt;(Rectangle&amp; rectangle);
	bool operator&lt;(Rectangle&amp; rectangle);
};
</code></pre>
<p>so sind die beiden operatorfunktionen in rectangle.cpp definiert:</p>
<pre><code class="language-cpp">bool Rectangle::operator&gt;(Rectangle&amp; rectangle)
{
	if (area &gt; rectangle.area)
		return true;
	else 
		return false;
}

bool Rectangle::operator&lt;(Rectangle&amp; rectangle)
{
	if (area &lt; rectangle.area)
		return true;
	else 
		return false;
}
</code></pre>
<p>in der main.cpp wollte ich das ganze so testen:</p>
<pre><code class="language-cpp">Rectangle rctOne(2.9, 3.8);   
	Rectangle rctTwo(3.4);

	if (rctOne &lt; rctTwo)
	{
		std::cout &lt;&lt; &quot;rctOne ist groesser als rctTwo.&quot;;
	}
	else
	{
		std::cout &lt;&lt; &quot;rctOne ist kleiner als rctTwo.&quot;;
	}
</code></pre>
<p>Problem: wenn ich im &quot;if()&quot; schreibe rctOne &lt; rctTwo, wird die untere Meldung<br />
ausgegeben, wenn ich schreibe rctOne &gt; rctTwo die obere Meldung.<br />
Die Flächen werden also gar nicht verglichen...wieso? was mache ich falsch?<br />
wäre dankbar um hilfe<br />
cu</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/208670/operatoren-lt-und-gt-überladen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 00:59:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/208670.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 21 Mar 2008 01:11:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to operatoren &amp;lt; und &amp;gt; überladen on Fri, 21 Mar 2008 01:11:22 GMT]]></title><description><![CDATA[<p>tach auch.<br />
ich wollte mal zur übung versuchen die vergleichsoperatoren &lt; und &gt; zu überladen<br />
für meine klasse &quot;Rectangle&quot;.</p>
<p>rectangle.h:</p>
<pre><code class="language-cpp">class Rectangle
{
private:
	double length;
	double width;
	double area;
public:
	Rectangle();
	Rectangle(double lgth, double wdth) {computeArea();};
	Rectangle(double ar);
	~Rectangle();
	void computeArea();
	bool operator&gt;(Rectangle&amp; rectangle);
	bool operator&lt;(Rectangle&amp; rectangle);
};
</code></pre>
<p>so sind die beiden operatorfunktionen in rectangle.cpp definiert:</p>
<pre><code class="language-cpp">bool Rectangle::operator&gt;(Rectangle&amp; rectangle)
{
	if (area &gt; rectangle.area)
		return true;
	else 
		return false;
}

bool Rectangle::operator&lt;(Rectangle&amp; rectangle)
{
	if (area &lt; rectangle.area)
		return true;
	else 
		return false;
}
</code></pre>
<p>in der main.cpp wollte ich das ganze so testen:</p>
<pre><code class="language-cpp">Rectangle rctOne(2.9, 3.8);   
	Rectangle rctTwo(3.4);

	if (rctOne &lt; rctTwo)
	{
		std::cout &lt;&lt; &quot;rctOne ist groesser als rctTwo.&quot;;
	}
	else
	{
		std::cout &lt;&lt; &quot;rctOne ist kleiner als rctTwo.&quot;;
	}
</code></pre>
<p>Problem: wenn ich im &quot;if()&quot; schreibe rctOne &lt; rctTwo, wird die untere Meldung<br />
ausgegeben, wenn ich schreibe rctOne &gt; rctTwo die obere Meldung.<br />
Die Flächen werden also gar nicht verglichen...wieso? was mache ich falsch?<br />
wäre dankbar um hilfe<br />
cu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478151</guid><dc:creator><![CDATA[Dave_R]]></dc:creator><pubDate>Fri, 21 Mar 2008 01:11:22 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren &amp;lt; und &amp;gt; überladen on Fri, 21 Mar 2008 01:37:53 GMT]]></title><description><![CDATA[<p>Dave_R schrieb:</p>
<blockquote>
<pre><code class="language-cpp">bool Rectangle::operator&gt;(Rectangle&amp; rectangle)
{
    if (area &gt; rectangle.area)
        return true;
    else
        return false;
}
</code></pre>
</blockquote>
<p>Die Funktion operator&gt; sollte besser eine andere Signatur haben:</p>
<pre><code class="language-cpp">bool Rectangle::operator&gt;(const Rectangle&amp; rectangle) const;
</code></pre>
<p>Die beiden consts sind wichtig, sonst wird es schwer deinen operator&gt; zu verwenden.</p>
<p>Haeufig schreibt man sowas auch als globale friend-Funktion, aber das macht hier praktisch keinen (gewollten) Unterschied.</p>
<p>Uebrigens ist area &gt; rectangle.area bereits ein Ausdruck vom Typ bool, da ist ein zusaetzliches if sehr umstaendlich. Du kannst direkt schreiben:</p>
<pre><code class="language-cpp">bool Rectangle::operator&gt;(const Rectangle&amp; rectangle) const {
    return area &gt; rectangle.area;
}
</code></pre>
<p>Dave_R schrieb:</p>
<blockquote>
<pre><code class="language-cpp">if (rctOne &lt; rctTwo)
    {
        std::cout &lt;&lt; &quot;rctOne ist groesser als rctTwo.&quot;;
    }
    else
    {
        std::cout &lt;&lt; &quot;rctOne ist kleiner als rctTwo.&quot;;
    }
</code></pre>
</blockquote>
<p>Deine cout-Ausgaben passen nicht zur if-Bedingung, vielleicht hast du dich nur vertan?<br />
Ansonsten wird die Flaeche nicht korrekt berechnet. Zum Beispiel ignoriert der Konstruktor Rectangle::Rectangle(double lgth, double wdth) seine beiden Parameter, das kann nicht gutgehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478154</guid><dc:creator><![CDATA[Christoph@Uni]]></dc:creator><pubDate>Fri, 21 Mar 2008 01:37:53 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren &amp;lt; und &amp;gt; überladen on Fri, 21 Mar 2008 13:27:50 GMT]]></title><description><![CDATA[<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="😃"
    /> naja was soll ich sagen:</p>
<p>es ist wohl keine sehr gute idee, morgens um 2 mit rasenden kopfschmerzen programmieren zu wollen....das alles hätte mir eigentlich selbst auffallen müssen...trotzdem danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478312</guid><dc:creator><![CDATA[Dave__R]]></dc:creator><pubDate>Fri, 21 Mar 2008 13:27:50 GMT</pubDate></item></channel></rss>