<?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!</p>
<p>Ich will den &gt;Operator meiner Klasse überladen(als Methode). Ich habe es so gemacht und es geht:</p>
<pre><code class="language-cpp">bool Automobile::operator &gt;(const Automobile &amp;oper){
	//Funktion fehlt
	return true;
}
</code></pre>
<p>Jedoch möchte ich meine Methode dazu benutzen um den Typ meines Objektes zu bestimmen, das mache ich mit Downcast. Bei meiner if-Anweisung wäre es aber besser wenn ich mit Zeigern arbeite, da es ja keine Null Referenzen gibt und mir die if in bestimmten Fällen eine bad_cast Ausnahme liefern würde.</p>
<p>Ich habe es jetzt so umgeschrieben:</p>
<pre><code class="language-cpp">bool Automobile::operator &gt;(const Automobile *oper){

	if(const Car* obj = dynamic_cast&lt;const Car*&gt;(oper))
		cout &lt;&lt; &quot;Car Objekt!&quot;;
	else cout &lt;&lt; &quot;kein Car Objekt&quot;; 

	return true;
}
</code></pre>
<p>Er meldet mir keinen Fehler jedoch wird beim Aufruf des &gt; Operator nicht diese Methode verwendet. Dies führt zu meiner ersten Frage: muss die Methode aus einem Parameter bestehen der eine &quot;const&quot; Referenz ist?</p>
<p>Zweitens: Kann ich diese Methode des Downcast mit Zeigern auch mit dem Referenzparameter realisieren?</p>
<p>Anmerkung: Die eigentliche Funktion des &gt; Vergleichs muss ich erst machen...</p>
<p>Mfg<br />
Dosunmu</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/183495/operator-überladen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 07:58:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/183495.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Jun 2007 14:35:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operator überladen on Tue, 05 Jun 2007 14:36:51 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich will den &gt;Operator meiner Klasse überladen(als Methode). Ich habe es so gemacht und es geht:</p>
<pre><code class="language-cpp">bool Automobile::operator &gt;(const Automobile &amp;oper){
	//Funktion fehlt
	return true;
}
</code></pre>
<p>Jedoch möchte ich meine Methode dazu benutzen um den Typ meines Objektes zu bestimmen, das mache ich mit Downcast. Bei meiner if-Anweisung wäre es aber besser wenn ich mit Zeigern arbeite, da es ja keine Null Referenzen gibt und mir die if in bestimmten Fällen eine bad_cast Ausnahme liefern würde.</p>
<p>Ich habe es jetzt so umgeschrieben:</p>
<pre><code class="language-cpp">bool Automobile::operator &gt;(const Automobile *oper){

	if(const Car* obj = dynamic_cast&lt;const Car*&gt;(oper))
		cout &lt;&lt; &quot;Car Objekt!&quot;;
	else cout &lt;&lt; &quot;kein Car Objekt&quot;; 

	return true;
}
</code></pre>
<p>Er meldet mir keinen Fehler jedoch wird beim Aufruf des &gt; Operator nicht diese Methode verwendet. Dies führt zu meiner ersten Frage: muss die Methode aus einem Parameter bestehen der eine &quot;const&quot; Referenz ist?</p>
<p>Zweitens: Kann ich diese Methode des Downcast mit Zeigern auch mit dem Referenzparameter realisieren?</p>
<p>Anmerkung: Die eigentliche Funktion des &gt; Vergleichs muss ich erst machen...</p>
<p>Mfg<br />
Dosunmu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299371</guid><dc:creator><![CDATA[dosunmu]]></dc:creator><pubDate>Tue, 05 Jun 2007 14:36:51 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladen on Tue, 05 Jun 2007 14:41:42 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">bool Automobile::operator &gt;(const Automobile&amp; op)
{
    if (dynamic_cast&lt;const Car*&gt;(&amp;oper) == NULL)
        std::cout &lt;&lt; &quot;Kein &quot;;
    std::cout &lt;&lt; &quot;Car Objekt!&quot; &lt;&lt; std::endl;

    return true;
}
</code></pre>
<p><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="😉"
    /> hmm obwohl ... ist schwachsin ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299381</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Tue, 05 Jun 2007 14:41:42 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladen on Tue, 05 Jun 2007 17:26:07 GMT]]></title><description><![CDATA[<p>Wieso benützt er nicht die überladene Methode wenn der &gt; Operator aufgerufen wird?</p>
<pre><code class="language-cpp">bool Automobile::operator &gt;(const Automobile *oper){ 

    if(const Car* obj = dynamic_cast&lt;const Car*&gt;(oper)) 
        cout &lt;&lt; &quot;Car Objekt!&quot;; 
    else cout &lt;&lt; &quot;kein Car Objekt&quot;; 

    return true; 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1299481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299481</guid><dc:creator><![CDATA[dosunmu]]></dc:creator><pubDate>Tue, 05 Jun 2007 17:26:07 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladen on Tue, 05 Jun 2007 17:34:57 GMT]]></title><description><![CDATA[<p>Weil du vermutlich nicht mit einem Pointer vergleichst <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>
<p>ansonsten wäre es nicht schlecht den op&gt; für Car zu überladen, anstelle eine dynamic_cast-Bastelei zu nehmen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299484</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Tue, 05 Jun 2007 17:34:57 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladen on Tue, 05 Jun 2007 17:37:31 GMT]]></title><description><![CDATA[<p>rüdiger schrieb:</p>
<blockquote>
<p>ansonsten wäre es nicht schlecht den op&gt; für Car zu überladen, anstelle eine dynamic_cast-Bastelei zu nehmen...</p>
</blockquote>
<p>Genau. In den meißten Fällen ist die Benutzung von dynamic_cast überflüssig und deutet auf ein Design-Fehler hin.</p>
<p>Kann man meißtens auch alles schön mit virtuellen Funktionen anders lösen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299486</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 05 Jun 2007 17:37:31 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladen on Tue, 05 Jun 2007 18:08:20 GMT]]></title><description><![CDATA[<p>Ich sehe hier drei Mankos.</p>
<p>Erstens, binäre non-assignment Operatoren solltest du eher global überladen. Bedenke, nicht nur a <em>op</em> b soll funktionieren, sondern auch b <em>op</em> a. Klassenseitig kannst du jedenfalls nur eines davon abdecken.</p>
<p>Zweitens, die Idee mit Zeigern als Parameter solltest du besser verwerfen, denn damit bekommst du spätestens bei der globalen Definition Probleme. Der Compiler kocht halt sein eigenes Süppchen mit Zeigern. Nimm Referenzen!</p>
<p>Und drittens,</p>
<p>rüdiger schrieb:</p>
<blockquote>
<p>ansonsten wäre es nicht schlecht den op&gt; für Car zu überladen, anstelle eine dynamic_cast-Bastelei zu nehmen...</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1299504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299504</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Tue, 05 Jun 2007 18:08:20 GMT</pubDate></item></channel></rss>