<?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 Polymorphismus]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe hier ein problem wo ich grad nicht weiter komme :</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;cstdlib&gt;
#include &lt;string&gt;

using namespace std;

class BASE_TYPES
{
	public:
		BASE_TYPES() {}
		BASE_TYPES(const BASE_TYPES &amp;object)
		{
		}
		BASE_TYPES &amp;operator=(const BASE_TYPES &amp;object)
		{
			return *this;
		}
		virtual bool operator==(const BASE_TYPES &amp;object)
		{
			if(isOfType(object))
				return hasSameValue(object);
			return false;
		}
		virtual ~BASE_TYPES() {}
	protected:
		virtual bool hasSameValue(const BASE_TYPES &amp;object) const = 0;
		virtual bool isOfType(const BASE_TYPES &amp;object) const
		{
			return ( typeid(*this) == typeid(object));
		}
};

class L_int : public BASE_TYPES
{
	public:
		L_int() {}
		~L_int() {}
		L_int(int value)
		:_value(value)
		{}
		int getValue(void) const
		{
			return _value;
		}
		L_int &amp;operator=(const L_int &amp;object)
		{
			_value = object._value;
			return *this;
		}
		L_int(const L_int &amp;object)
		{
			_value = object._value;
		}
	private:
		virtual bool hasSameValue(const BASE_TYPES &amp;object) const
		{
			L_int v = static_cast&lt;const L_int&amp;&gt;(object);
			if(v.getValue( ) == getValue( ))
				return true;
			return false;
		}
		int _value;
};

typedef vector&lt;BASE_TYPES*&gt; Tuple;

int main(void)
{
	Tuple t;
	L_int a(13);
	L_int b(13);
	t.push_back(&amp;a);
	t.push_back(&amp;b);
	cout&lt;&lt;(a == b ? &quot;true&quot; : &quot;false&quot;)&lt;&lt;endl;
	cout&lt;&lt;( t.at(0) == t.at(1) ? &quot;true&quot; : &quot;false&quot;)&lt;&lt;endl;
	return 0;
}
</code></pre>
<p>Es geht darum, sich selbst &quot;eigene Datentypen&quot; zu definieren die von der Basis Klasse ableiten , die folgende Sachen zur Verfügung stellt :</p>
<p>u.a.</p>
<p>* Vergleichsoperator<br />
* Überprüfung, ob 2 &quot;eigene Datentypen&quot; vom gleichen Typ sind.</p>
<p>Die Klasse L_int stellt dabei ein einfaches int dar. Mit isOfType(...) kann ich prüfen, ob es sich bei 2 Objekten um gleiche Typen handelt, wo es grad nicht will, ist der Vergleichsoperator ( === ). Ich will den in der Basis Klasse haben</p>
<pre><code class="language-cpp">virtual bool operator==(const BASE_TYPES &amp;object)
{
      // Falls vom gleichen Typen
      if(isOfType(object))
        // Prüfe ob die Werte gleich sind
	return hasSameValue(object);
      return false;
}
</code></pre>
<p>Die Methode hasSameValue(...) ist &quot;pure virtual&quot;, da ich will, dass man den vergleich für seine eigene Datentypen selber machen einprogrammieren muss ( Ich weiß ja nicht, welche Datentypen sich jemand bastelt und wie er die vergleichen will ).</p>
<pre><code class="language-cpp">cout&lt;&lt;(a == b ? &quot;true&quot; : &quot;false&quot;)&lt;&lt;endl;
cout&lt;&lt;( t.at(0) == t.at(1) ? &quot;true&quot; : &quot;false&quot;)&lt;&lt;endl;
</code></pre>
<p>Der erste Vergleich mit den Objekten funktioniert, beim zweiten nehme ich die in dem Vector gespeicherten Objekte ( bzw. Zeiger auf die Objekte ) und will nun ebenfalls mal vergleichen, was nicht geht, ich bekomme ein false. Er greift ( so denke ich ) nicht auf den Vergleichsoperator == in der Klasse L_int zu ?</p>
<p>Wie könnte man das lösen <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/178275/problem-mit-polymorphismus</link><generator>RSS for Node</generator><lastBuildDate>Sun, 20 Sep 2026 18:19:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/178275.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 09 Apr 2007 23:24:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Polymorphismus on Mon, 09 Apr 2007 23:24:35 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe hier ein problem wo ich grad nicht weiter komme :</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;cstdlib&gt;
#include &lt;string&gt;

using namespace std;

class BASE_TYPES
{
	public:
		BASE_TYPES() {}
		BASE_TYPES(const BASE_TYPES &amp;object)
		{
		}
		BASE_TYPES &amp;operator=(const BASE_TYPES &amp;object)
		{
			return *this;
		}
		virtual bool operator==(const BASE_TYPES &amp;object)
		{
			if(isOfType(object))
				return hasSameValue(object);
			return false;
		}
		virtual ~BASE_TYPES() {}
	protected:
		virtual bool hasSameValue(const BASE_TYPES &amp;object) const = 0;
		virtual bool isOfType(const BASE_TYPES &amp;object) const
		{
			return ( typeid(*this) == typeid(object));
		}
};

class L_int : public BASE_TYPES
{
	public:
		L_int() {}
		~L_int() {}
		L_int(int value)
		:_value(value)
		{}
		int getValue(void) const
		{
			return _value;
		}
		L_int &amp;operator=(const L_int &amp;object)
		{
			_value = object._value;
			return *this;
		}
		L_int(const L_int &amp;object)
		{
			_value = object._value;
		}
	private:
		virtual bool hasSameValue(const BASE_TYPES &amp;object) const
		{
			L_int v = static_cast&lt;const L_int&amp;&gt;(object);
			if(v.getValue( ) == getValue( ))
				return true;
			return false;
		}
		int _value;
};

typedef vector&lt;BASE_TYPES*&gt; Tuple;

int main(void)
{
	Tuple t;
	L_int a(13);
	L_int b(13);
	t.push_back(&amp;a);
	t.push_back(&amp;b);
	cout&lt;&lt;(a == b ? &quot;true&quot; : &quot;false&quot;)&lt;&lt;endl;
	cout&lt;&lt;( t.at(0) == t.at(1) ? &quot;true&quot; : &quot;false&quot;)&lt;&lt;endl;
	return 0;
}
</code></pre>
<p>Es geht darum, sich selbst &quot;eigene Datentypen&quot; zu definieren die von der Basis Klasse ableiten , die folgende Sachen zur Verfügung stellt :</p>
<p>u.a.</p>
<p>* Vergleichsoperator<br />
* Überprüfung, ob 2 &quot;eigene Datentypen&quot; vom gleichen Typ sind.</p>
<p>Die Klasse L_int stellt dabei ein einfaches int dar. Mit isOfType(...) kann ich prüfen, ob es sich bei 2 Objekten um gleiche Typen handelt, wo es grad nicht will, ist der Vergleichsoperator ( === ). Ich will den in der Basis Klasse haben</p>
<pre><code class="language-cpp">virtual bool operator==(const BASE_TYPES &amp;object)
{
      // Falls vom gleichen Typen
      if(isOfType(object))
        // Prüfe ob die Werte gleich sind
	return hasSameValue(object);
      return false;
}
</code></pre>
<p>Die Methode hasSameValue(...) ist &quot;pure virtual&quot;, da ich will, dass man den vergleich für seine eigene Datentypen selber machen einprogrammieren muss ( Ich weiß ja nicht, welche Datentypen sich jemand bastelt und wie er die vergleichen will ).</p>
<pre><code class="language-cpp">cout&lt;&lt;(a == b ? &quot;true&quot; : &quot;false&quot;)&lt;&lt;endl;
cout&lt;&lt;( t.at(0) == t.at(1) ? &quot;true&quot; : &quot;false&quot;)&lt;&lt;endl;
</code></pre>
<p>Der erste Vergleich mit den Objekten funktioniert, beim zweiten nehme ich die in dem Vector gespeicherten Objekte ( bzw. Zeiger auf die Objekte ) und will nun ebenfalls mal vergleichen, was nicht geht, ich bekomme ein false. Er greift ( so denke ich ) nicht auf den Vergleichsoperator == in der Klasse L_int zu ?</p>
<p>Wie könnte man das lösen <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/1262598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1262598</guid><dc:creator><![CDATA[tsluga]]></dc:creator><pubDate>Mon, 09 Apr 2007 23:24:35 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Polymorphismus on Tue, 10 Apr 2007 00:49:06 GMT]]></title><description><![CDATA[<p>tsluga schrieb:</p>
<blockquote>
<pre><code class="language-cpp">cout&lt;&lt;(a == b ? &quot;true&quot; : &quot;false&quot;)&lt;&lt;endl;
cout&lt;&lt;( t.at(0) == t.at(1) ? &quot;true&quot; : &quot;false&quot;)&lt;&lt;endl;
</code></pre>
<p>Der erste Vergleich mit den Objekten funktioniert, beim zweiten nehme ich die in dem Vector gespeicherten Objekte ( bzw. Zeiger auf die Objekte ) und will nun ebenfalls mal vergleichen, was nicht geht, ich bekomme ein false. Er greift ( so denke ich ) nicht auf den Vergleichsoperator == in der Klasse L_int zu ?</p>
<p>Wie könnte man das lösen <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>
</blockquote>
<p>Indem du die Zeiger, die at liefert, dereferenzierst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1262611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1262611</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 10 Apr 2007 00:49:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Polymorphismus on Tue, 10 Apr 2007 07:45:04 GMT]]></title><description><![CDATA[<p>&lt;spam&gt;</p>
<blockquote>
<p>Vergleichsoperator ( === ).</p>
</blockquote>
<p>Wo ist hier der smilie mit drei augen? <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 />
&lt;/spam&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1262670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1262670</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Tue, 10 Apr 2007 07:45:04 GMT</pubDate></item></channel></rss>