<?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[Problem mit abstrakter Methode]]></title><description><![CDATA[<p>Servus.<br />
Ich habe eine Klasse mit einer Schnittstellenmethode &quot;isEqual()&quot;:</p>
<pre><code class="language-cpp">class SuperClass
{
public:
	SuperClass(void){};
	~SuperClass(void){};
	virtual bool isEqual(SuperClass s) = 0;
};
</code></pre>
<p>Von dieser Klasse leite ich jetzt eine zweite Klasse ab, die die Schnittstelle implementieren soll:</p>
<pre><code class="language-cpp">class ClassA : public SuperClass
{
public:
	ClassA(void){};
	~ClassA(void){};
	bool isEqual(ClassA c)
	{
		return true;
	}
};
</code></pre>
<p>Der Compiler sagt mir:</p>
<pre><code>'ClassA': Instanz von abstrakter Klasse kann nicht erstellt werden aufgrund folgender Member:
&quot;bool SuperClass::isEqual(SuperClass)&quot;: ist abstrakt
</code></pre>
<p>Offensichtlich stört er sich am Argument der isEqual-Methode, wenn ich das rausnehme, gibt der Compiler sein OK.</p>
<p>Was ich möchte, ist die Implementierung einer Vergleichsoperation zwischen zwei Objekten zu erzwingen.</p>
<p>Kann mir jemand weiterhelfen?</p>
<p>Gruß, Tim.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/203961/problem-mit-abstrakter-methode</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 07:54:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/203961.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 28 Jan 2008 16:55:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Mon, 28 Jan 2008 16:55:09 GMT]]></title><description><![CDATA[<p>Servus.<br />
Ich habe eine Klasse mit einer Schnittstellenmethode &quot;isEqual()&quot;:</p>
<pre><code class="language-cpp">class SuperClass
{
public:
	SuperClass(void){};
	~SuperClass(void){};
	virtual bool isEqual(SuperClass s) = 0;
};
</code></pre>
<p>Von dieser Klasse leite ich jetzt eine zweite Klasse ab, die die Schnittstelle implementieren soll:</p>
<pre><code class="language-cpp">class ClassA : public SuperClass
{
public:
	ClassA(void){};
	~ClassA(void){};
	bool isEqual(ClassA c)
	{
		return true;
	}
};
</code></pre>
<p>Der Compiler sagt mir:</p>
<pre><code>'ClassA': Instanz von abstrakter Klasse kann nicht erstellt werden aufgrund folgender Member:
&quot;bool SuperClass::isEqual(SuperClass)&quot;: ist abstrakt
</code></pre>
<p>Offensichtlich stört er sich am Argument der isEqual-Methode, wenn ich das rausnehme, gibt der Compiler sein OK.</p>
<p>Was ich möchte, ist die Implementierung einer Vergleichsoperation zwischen zwei Objekten zu erzwingen.</p>
<p>Kann mir jemand weiterhelfen?</p>
<p>Gruß, Tim.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445197</guid><dc:creator><![CDATA[Tim_]]></dc:creator><pubDate>Mon, 28 Jan 2008 16:55:09 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Mon, 28 Jan 2008 17:06:31 GMT]]></title><description><![CDATA[<p>Naja,</p>
<p>das sind ja auch nicht &quot;dieselben&quot; Funktionen:</p>
<p>Tim_ schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">bool isEqual(SuperClass s) = 0;
	bool isEqual(ClassA c)
</code></pre>
<p>...</p>
</blockquote>
<p>... weil sie nicht dieselbe Signatur haben (unterschiedliche Parameter).<br />
Du wirst übel Probleme mit Objektzerlegung haben, wenn Du das so machen möchtest.<br />
Außerdem dürfte Dir der Call-per-Value machen, weil Du eine Kopie übergibst.<br />
Und schließlich läufst Du da wohl in &quot;double-dispatching-Probleme&quot; rein, wenn Du das mit Referenzen/Pointern machen möchtest.</p>
<pre><code class="language-cpp">struct Base {
   virtual bool isEqual(Base const*) = 0;
};

struct D1 = Base {
   bool isEqual(Base const*);
};

struct D2 = Base {
   bool isEqual(Base const*);
};

int main() {
   D1 d1;
   D2 d2;
   d1.isEqual(&amp;d2); // Woher weiß D1::isEqual, welcher Typ sein Parameter ist ?
</code></pre>
<p>Kleine Randfrage: Hast Du bislang Java programmiert ? <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>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445198</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 28 Jan 2008 17:06:31 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Mon, 28 Jan 2008 17:04:01 GMT]]></title><description><![CDATA[<p>Tim, frag Dich mal, inwiefern eine solche Methode überhaupt sinnvoll ist, und was Dir Polymorphie hier nützt. Ich würde sagen, in den allermeisten Fällen nichts. Daher bietet sich wohl eher an, <code>operator ==</code> zu überladen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445199</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Mon, 28 Jan 2008 17:04:01 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Mon, 28 Jan 2008 17:07:49 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Kleine Randfrage: Hast Du bislang Java programmiert ? <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>
</blockquote>
<p>Sowas (kovariante Argumenttypen) geht auch in Java nicht. Die abgeleitete Klasse muss mindestens genauso viel können wie die Methode der Oberklasse, also muss sie auch Objekte der Oberklasse als Argument entgegennehmen können. Möglicherweise mehr, wenn man will und falls es noch eine SuperSuperClass gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445202</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 28 Jan 2008 17:07:49 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Mon, 28 Jan 2008 17:19:27 GMT]]></title><description><![CDATA[<p>Bashar, consider:</p>
<pre><code class="language-java">isEqual(? extends SuperClass)
</code></pre>
<p>Müsste gehen, wenn ich mich nicht irre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445207</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Mon, 28 Jan 2008 17:19:27 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Mon, 28 Jan 2008 17:32:24 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Kleine Randfrage: Hast Du bislang Java programmiert ? <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>
</blockquote>
<p>Sowas (kovariante Argumenttypen) geht auch in Java nicht. Die abgeleitete Klasse muss mindestens genauso viel können wie die Methode der Oberklasse, also muss sie auch Objekte der Oberklasse als Argument entgegennehmen können. Möglicherweise mehr, wenn man will und falls es noch eine SuperSuperClass gibt.</p>
</blockquote>
<p>Das ist dann allerdings Kontravarianz <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/1445213</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445213</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 28 Jan 2008 17:32:24 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Mon, 28 Jan 2008 19:01:53 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Das ist dann allerdings Kontravarianz <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>
</blockquote>
<p>Richtig. Ich verstehe den Smiley nicht.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5021">@Konrad</a> Rudolph:<br />
Keine Ahnung, was bedeutet das, und wie sieht das syntaktisch vollständig aus? Ist das nicht für generische Sachen? Meine Java-Kenntnisse sind etwas veraltet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445290</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 28 Jan 2008 19:01:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Mon, 28 Jan 2008 19:13:36 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Keine Ahnung, was bedeutet das, und wie sieht das syntaktisch vollständig aus?</p>
</blockquote>
<p>Das <em>ist</em> vollständig. Java implementiert explizite Ko- und Kontravarianz von generischen Parametern über die von mir verwendete Syntax. Womit ich nur ausdrücken wollte, dass Deine Aussage:</p>
<p>Bashar schrieb:</p>
<blockquote>
<p>Sowas (kovariante Argumenttypen) geht auch in Java nicht.</p>
</blockquote>
<p>nicht mehr korrekt ist.</p>
<blockquote>
<p>Meine Java-Kenntnisse sind etwas veraltet.</p>
</blockquote>
<p>Nun gut, das kann Java auch noch nicht so lange.</p>
<p>/EDIT: Hmm, die Syntax ist so wohl doch nicht ganz vollständig. Keine Ahnung, wie man das genau machen müsste. Hab das erst sehr selten verwendet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445294</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Mon, 28 Jan 2008 19:13:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Mon, 28 Jan 2008 19:13:32 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Ich verstehe den Smiley nicht.</p>
</blockquote>
<p>Fall von unbewusster Imitation. Stell es dir als Metadaten vor, ohne eigenen Sinn in sich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445298</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 28 Jan 2008 19:13:32 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Tue, 29 Jan 2008 00:52:45 GMT]]></title><description><![CDATA[<p>Tim_ schrieb:</p>
<blockquote>
<p>Servus.<br />
Ich habe eine Klasse mit einer Schnittstellenmethode &quot;isEqual()&quot;:</p>
<pre><code class="language-cpp">class SuperClass
{
public:
	SuperClass(void){};
	~SuperClass(void){};
	virtual bool isEqual(SuperClass s) = 0;
};
</code></pre>
</blockquote>
<p>Das kann schonmal deswegen nicht gehen weil SuperClass abstrakt ist, und man daher keine SuperClass Instanzen erstellen kann. Die Übergabe einer SuperClass als Parameter (by value) geht daher schonmal überhaupt nicht.</p>
<p>Und vermutlich weil die Sache so verflixt danach aussieht als ob hier &quot;isEqual(SuperClass* s)&quot; statt &quot;isEqual(SuperClass s)&quot; gemeint war dann die Frage ob du vorher Java programmiert hast (weil dort die Schreibweise &quot;isEqual(SuperClass s)&quot; korrekt wäre).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445416</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 29 Jan 2008 00:52:45 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Tue, 29 Jan 2008 09:18:18 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>...<br />
Und vermutlich weil die Sache so verflixt danach aussieht als ob hier &quot;isEqual(SuperClass* s)&quot; statt &quot;isEqual(SuperClass s)&quot; gemeint war dann die Frage ob du vorher Java programmiert hast (weil dort die Schreibweise &quot;isEqual(SuperClass s)&quot; korrekt wäre).</p>
</blockquote>
<p>Eben. <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/1445500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445500</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 29 Jan 2008 09:18:18 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Tue, 29 Jan 2008 10:22:51 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>danke für eure zahlreichen Antworten. Tatsächlich komme ich ursprünglich aus der Java-Welt. So etwas wie Operatorenüberladung ist mir neu, aber im Grunde das, was ich in diesem Zusammenhang suche.<br />
Ich würde nur gern irgendwie erzwingen, dass der Vergleichsoperator von abgeleiteten Klassen überladen wird.<br />
Ich nehme an, auch</p>
<pre><code class="language-cpp">virtual bool operator ==(SuperClass s) = 0;
</code></pre>
<p>bzw.</p>
<pre><code class="language-cpp">virtual bool operator ==(SuperClass* pS) = 0;
</code></pre>
<p>wird aus den genannten Gründen nicht funktionieren.</p>
<p>Nochmal zur Erklärung, was ich eigentlich modellieren will:<br />
Ich habe eine Schnittstellenklasse &quot;ParameterSet&quot;, welche unter anderem die Methoden &quot;virtual void setStandardParameter() = 0;&quot; und &quot;virtual int getChecksum() = 0;&quot; vorgibt, die abgeleitete Klassen implementieren müssen. Hier würde ich auch gern eine (virtuelle) Vergleichsoperation unterbringen.<br />
Vielleicht habt ihr eine Idee.</p>
<p>Gruß, Tim.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445527</guid><dc:creator><![CDATA[Tim_]]></dc:creator><pubDate>Tue, 29 Jan 2008 10:22:51 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Tue, 29 Jan 2008 10:33:37 GMT]]></title><description><![CDATA[<p>Wenn du deiner Superklasse eine abstrakte Vergleichsfunktion mit sich selbst definierst, dann bedeutet das, dass alle abgeleiteten Klassen auch eine Vergleichsfunktion <em>mit der Superklasse</em> haben müssen. Wenn du also von der Superklasse zwei Klassen Konkret1 und Konkret2 ableitest, müssen die beiden auch untereinander vergleichbar sein. In den meisten Fällen ist das Unsinn...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445534</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 29 Jan 2008 10:33:37 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Tue, 29 Jan 2008 10:58:16 GMT]]></title><description><![CDATA[<p>Ok, das verstehe ich soweit.<br />
D.h. es ist grundsätzlich nicht möglich, eine Schnittstellenfunktion zu definieren, in deren Argumenten ein Bezug zur abgeleiteten Klasse hergestellt wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445540</guid><dc:creator><![CDATA[Tim_]]></dc:creator><pubDate>Tue, 29 Jan 2008 10:58:16 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Tue, 29 Jan 2008 11:46:07 GMT]]></title><description><![CDATA[<p>Tim_ schrieb:</p>
<blockquote>
<p>Ok, das verstehe ich soweit.<br />
D.h. es ist grundsätzlich nicht möglich, eine Schnittstellenfunktion zu definieren, in deren Argumenten ein Bezug zur abgeleiteten Klasse hergestellt wird?</p>
</blockquote>
<p>Ein klares JEIN <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="😉"
    /> Schau dir mal folgendes an:</p>
<pre><code class="language-cpp">class AbstractSuperClass 
{
public: 
  virtual void setStandardParameter() = 0;
  virtual int getChecksum() = 0;
};

template &lt;class Derived&gt;
class SpecificSuperClass : public AbstractSuperClass
{
public:
  virtual bool isEqual(Derived const&amp; other) = 0;
};

class Concreteclass : public SpecificSuperClass&lt;Concreteclass&gt;
{
public:
  //hier muss isEqual(Concreteclass const&amp;) definiert werden
};
</code></pre>
<p>Die Art, aus der Basisklasse ein template zu machen das abhängig ist von der abgeleiteten Klasse, nennt sich &quot;Curiously Recurring Template Pattern&quot; - für mehr Informationen darüber gibts bei google vermutlich ne Menge Links.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445564</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 29 Jan 2008 11:46:07 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Tue, 29 Jan 2008 12:18:29 GMT]]></title><description><![CDATA[<p>pumuckl, wenn ich das richtig verstehe, erzwingt das nur, dass ConcreteClass die Funktion &quot;bool isEqual( ConcreteClass const&amp; )&quot; implementieren <em>muss</em>? Welchen Vorteil hat das gegenüber dem, dass man ConcreteClass direkt von AbstractSuperClass ableitet und die Methode isEqual &quot;einfach so&quot; implementiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445593</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Tue, 29 Jan 2008 12:18:29 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Tue, 29 Jan 2008 12:42:44 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Ein klares JEIN <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="😉"
    /> Schau dir mal folgendes an:</p>
<pre><code class="language-cpp">class AbstractSuperClass 
{
public: 
  virtual void setStandardParameter() = 0;
  virtual int getChecksum() = 0;
};

template &lt;class Derived&gt;
class SpecificSuperClass : public AbstractSuperClass
{
public:
  virtual bool isEqual(Derived const&amp; other) = 0;
};

class Concreteclass : public SpecificSuperClass&lt;Concreteclass&gt;
{
public:
  //hier muss isEqual(Concreteclass const&amp;) definiert werden
};
</code></pre>
</blockquote>
<p>Ok, mit virtuellen Template-Methoden hatte ich schon erfolglos experimentiert aber das Template über die ganze Klasse zu setzen, ist mir bisher noch nicht in den Sinn gekommen. <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 />
Danke für den Tipp.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445613</guid><dc:creator><![CDATA[Tim_]]></dc:creator><pubDate>Tue, 29 Jan 2008 12:42:44 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Tue, 29 Jan 2008 13:41:40 GMT]]></title><description><![CDATA[<p>Also ich verstehe wiedermal den ganzen Aufstand hier nicht.<br />
isEqual ist schon OK als Funktionsname, und es ist auch OK das in der Basisklasse anzusiedeln:</p>
<pre><code class="language-cpp">class Object
{
public:
    virtual bool isEqual(Object const* other) const = 0;
};
</code></pre>
<p>Das hat den Vorteil dass man 2 &quot;Objekte&quot; vergleichen kann, auch ohne zu wissen ob sie überhaupt vom gleichen Typ sind. D.h. ich kann einen String mit einem Rechteck vergleichen (und würde einfach nur &quot;false&quot; rausbekommen).<br />
Was oft sehr praktisch ist.<br />
Oder ich kann rausbekommen dass 2 Objekte gleich sind, ohne wissen zu müssen von welchem Typ sie nun sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445650</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 29 Jan 2008 13:41:40 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Tue, 29 Jan 2008 13:47:23 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Das hat den Vorteil dass man 2 &quot;Objekte&quot; vergleichen kann, auch ohne zu wissen ob sie überhaupt vom gleichen Typ sind. D.h. ich kann einen String mit einem Rechteck vergleichen (und würde einfach nur &quot;false&quot; rausbekommen).<br />
Was oft sehr praktisch ist.</p>
</blockquote>
<p>Wann ist das praktisch?</p>
<p>Sicher, in gewissen Vererbungshierarchien mag ein solches Wissen notwendig sein (Composite Pattern …). Aber ich sehe keine Situation, in der man Strings mit Rechtecken vergleichen muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445655</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Tue, 29 Jan 2008 13:47:23 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Tue, 29 Jan 2008 13:57:49 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>...ich kann einen String mit einem Rechteck vergleichen (und würde einfach nur &quot;false&quot; rausbekommen)...</p>
</blockquote>
<p>Nicht unbedingt ... das hängt doch ziemlich von der Art des Vergleichs ab.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445663</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 29 Jan 2008 13:57:49 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Tue, 29 Jan 2008 14:36:40 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>/EDIT: Hmm, die Syntax ist so wohl doch nicht ganz vollständig. Keine Ahnung, wie man das genau machen müsste. Hab das erst sehr selten verwendet.</p>
</blockquote>
<p>Bevor ich mich geschlagen gebe, würde ich trotz allem gerne noch wissen, wie das aussehen soll. Die ? extends foo Syntax hab ich bisher nur im Kontext von Generics gesehen, und ich bin mir nicht ganz sicher ob das das ist was wir hier suchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445695</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 29 Jan 2008 14:36:40 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit abstrakter Methode on Tue, 29 Jan 2008 14:55:38 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>/EDIT: Hmm, die Syntax ist so wohl doch nicht ganz vollständig. Keine Ahnung, wie man das genau machen müsste. Hab das erst sehr selten verwendet.</p>
</blockquote>
<p>Bevor ich mich geschlagen gebe, würde ich trotz allem gerne noch wissen, wie das aussehen soll. Die ? extends foo Syntax hab ich bisher nur im Kontext von Generics gesehen, und ich bin mir nicht ganz sicher ob das das ist was wir hier suchen.</p>
</blockquote>
<p>Ja, ich meinte es auch durchaus im Kontext von Generics. Wobei man hierfür die Template-Kontravarianz gar nicht braucht (hmm, fällt mir spät ein) – ich meinte eigentlich so etwas wie CRTP für Java, womit der erzielte Effekt erreicht würde. … bin gerade ein wenig konfus.</p>
<p>(Ich habe keine Ahnung, ob man sowas in Java überhaupt verwendet, aber in .NET macht man das.)</p>
<pre><code class="language-java">abstract class Base&lt;T&gt; {
    public abstract boolean isEqual(T other);
}

class Derived extends Base&lt;Derived&gt; {
    public boolean isEqual(Derived other) { return true; }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1445705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445705</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Tue, 29 Jan 2008 14:55:38 GMT</pubDate></item></channel></rss>