<?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[Template + Polymorphie + Operatorenüberladung - Theoriefrage]]></title><description><![CDATA[<p>Hallo Forenmitglieder,</p>
<p>ich bin mir unsicher, ob mein Denkansatz zur Kombination von Templates, Polymorphie und Operatorenüberladung falsch ist.</p>
<p>Ich versuche eine Funktion zu schreiben, der ich ein Objekt übergeben kann, dass sämtliche Datentypen enthalten kann, ohne eine Templatefunktion zu benutzen.</p>
<p>Hierzu eine Beispielklasse:</p>
<pre><code class="language-cpp">template&lt;class t&gt;
class testClass
{
	public:
		t&amp; operator[](long int i)
		{
			return tArray[i];
		}
	private:
		t tArray[10];	
}
</code></pre>
<p>Einen Pointer auf ein Objekt dieser Klasse möchte ich jetzt einer Funktion übergeben, ohne zur Kompilierzeit zu wissen, welchen Datentyp t zur Laufzeit hat.</p>
<p>Ich habe nun versucht eine nicht-Template Klasse zu schreiben und die Beispielklasse von selbiger abzuleiten. Dadurch kann ich einen Pointer der übergeordneten Klasse, der auf ein Objekt der Beispielklasse zeigt übergeben. Das funktioniert allerdings nur solange ich keine Rückgabewerte des Datentyps t benötige (wie z.B. bei der Überladung des Indexopperators t&amp;).</p>
<p>Gibt es eine Möglichkeit dies dennoch zu benutzen, oder muss ich in diesem Fall auf die Opperatorenüberladung verzichten?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/234907/template-polymorphie-operatorenüberladung-theoriefrage</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 08:31:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/234907.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Feb 2009 14:05:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template + Polymorphie + Operatorenüberladung - Theoriefrage on Tue, 24 Feb 2009 07:19:43 GMT]]></title><description><![CDATA[<p>Hallo Forenmitglieder,</p>
<p>ich bin mir unsicher, ob mein Denkansatz zur Kombination von Templates, Polymorphie und Operatorenüberladung falsch ist.</p>
<p>Ich versuche eine Funktion zu schreiben, der ich ein Objekt übergeben kann, dass sämtliche Datentypen enthalten kann, ohne eine Templatefunktion zu benutzen.</p>
<p>Hierzu eine Beispielklasse:</p>
<pre><code class="language-cpp">template&lt;class t&gt;
class testClass
{
	public:
		t&amp; operator[](long int i)
		{
			return tArray[i];
		}
	private:
		t tArray[10];	
}
</code></pre>
<p>Einen Pointer auf ein Objekt dieser Klasse möchte ich jetzt einer Funktion übergeben, ohne zur Kompilierzeit zu wissen, welchen Datentyp t zur Laufzeit hat.</p>
<p>Ich habe nun versucht eine nicht-Template Klasse zu schreiben und die Beispielklasse von selbiger abzuleiten. Dadurch kann ich einen Pointer der übergeordneten Klasse, der auf ein Objekt der Beispielklasse zeigt übergeben. Das funktioniert allerdings nur solange ich keine Rückgabewerte des Datentyps t benötige (wie z.B. bei der Überladung des Indexopperators t&amp;).</p>
<p>Gibt es eine Möglichkeit dies dennoch zu benutzen, oder muss ich in diesem Fall auf die Opperatorenüberladung verzichten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668754</guid><dc:creator><![CDATA[DMosig]]></dc:creator><pubDate>Tue, 24 Feb 2009 07:19:43 GMT</pubDate></item><item><title><![CDATA[Reply to Template + Polymorphie + Operatorenüberladung - Theoriefrage on Mon, 23 Feb 2009 14:37:25 GMT]]></title><description><![CDATA[<p>Zeig mal deinen bisherigen Code bitte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668773</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Mon, 23 Feb 2009 14:37:25 GMT</pubDate></item><item><title><![CDATA[Reply to Template + Polymorphie + Operatorenüberladung - Theoriefrage on Mon, 23 Feb 2009 14:44:01 GMT]]></title><description><![CDATA[<p>Du kannst zur Laufzeit keine Klassentemplates überreichen, nur Templateklassen.<br />
Oder anders gesagt, deine präsentierte Klasse, kannst du zur Laufzeit nur übergeben, wenn du auch einen Typen für t definiert hast.</p>
<p>C++ ist Typsicher, dass heisst, dass der Typ von einem Objekt sich nicht zur Laufzeit ändern kann.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668779</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 23 Feb 2009 14:44:01 GMT</pubDate></item><item><title><![CDATA[Reply to Template + Polymorphie + Operatorenüberladung - Theoriefrage on Mon, 23 Feb 2009 14:45:07 GMT]]></title><description><![CDATA[<p>Ist da nicht ein Fehler im Code?<br />
Der Rückgabewert des operator[] ist t&amp;, aber du gibst eine Adresse von t zurück.<br />
Müsste es nicht heißen:</p>
<pre><code class="language-cpp">t&amp; operator[](long int i)
        {
            return tArray[i]; // nicht &amp;tArray[i];
        }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1668780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668780</guid><dc:creator><![CDATA[sdfsdfsdds]]></dc:creator><pubDate>Mon, 23 Feb 2009 14:45:07 GMT</pubDate></item><item><title><![CDATA[Reply to Template + Polymorphie + Operatorenüberladung - Theoriefrage on Tue, 24 Feb 2009 08:21:54 GMT]]></title><description><![CDATA[<p>Danke sdfsdfsdds, da hat sich bei meinem Beispiel ein kleiner Fehler eingeschlichen. Ich habe es mal korrigiert.</p>
<p>Das Problem hat sich mittlerweile erledigt, aber ich erkläre trozdem nochmal was ich vor hatte. Ich wollte Elemente in einer Funktion vertauschen können, ohne vorher deren Datentyp zu kennen.</p>
<p>Gestern abend bin ich aber drauf gekommen wie ich mein Problem lösen kann:<br />
Ich benutze statt</p>
<pre><code class="language-cpp">*(testObj)[0] = *(testObj)[1];
</code></pre>
<p>eine Methode, mit der ich zwei Elemente tauschen kann.</p>
<pre><code class="language-cpp">class Liste
{
	public:
		virtual void ArraySwitch(long int index1, long int index2) = 0;
};

template&lt;class t&gt;
class tplListe : public Liste
{
	public:
		void ArraySwitch(long int index1, long int index2)
		{
			//tmp = tArray[index1];
			//tArray[index1] = tArray[index2];
			//tArray[index2] = tmp;
			std::cout &lt;&lt; &quot;Switched : &quot; &lt;&lt; index1 &lt;&lt; &quot; &quot; &lt;&lt; index2 &lt;&lt; std::endl;
		}
	private:
		t tArray[10];
		t tmp;
};

void testFunc(Liste* p1, long int i, long int j);

int main()
{
	Liste * TplListe1 = new tplListe&lt;int&gt;();

	testFunc(TplListe1,1,2);

    system(&quot;PAUSE&quot;);
    return EXIT_SUCCESS;
}

void testFunc(Liste* p1, long int i, long int j)
{
	p1-&gt;ArraySwitch(i,j);
}
</code></pre>
<p>Damit klappt alles so, wie ich wollte.<br />
Vielen Dank an alle, die sich die Zeit genommen haben mir zu helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1669148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1669148</guid><dc:creator><![CDATA[DMosig]]></dc:creator><pubDate>Tue, 24 Feb 2009 08:21:54 GMT</pubDate></item><item><title><![CDATA[Reply to Template + Polymorphie + Operatorenüberladung - Theoriefrage on Tue, 24 Feb 2009 08:45:17 GMT]]></title><description><![CDATA[<p>Kennst du std::swap?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1669163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1669163</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 24 Feb 2009 08:45:17 GMT</pubDate></item><item><title><![CDATA[Reply to Template + Polymorphie + Operatorenüberladung - Theoriefrage on Tue, 24 Feb 2009 12:00:57 GMT]]></title><description><![CDATA[<p>Jetzt ja <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="😃"
    /></p>
<p>Aber ist eigentlich auch egal was ich zum lernen programmiere, da es sowieso für fast alles Bibliotheken gibt.</p>
<p>So ist es eigentlich auch sinnfrei, dass ich Bubble- und Quicksort programmiert hab <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1669264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1669264</guid><dc:creator><![CDATA[DMosig]]></dc:creator><pubDate>Tue, 24 Feb 2009 12:00:57 GMT</pubDate></item><item><title><![CDATA[Reply to Template + Polymorphie + Operatorenüberladung - Theoriefrage on Tue, 24 Feb 2009 12:18:43 GMT]]></title><description><![CDATA[<p>DMosig schrieb:</p>
<blockquote>
<p>So ist es eigentlich auch sinnfrei, dass ich Bubble- und Quicksort programmiert hab <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>
</blockquote>
<p>Naja, der Punkt ist, dein Ansatz ist falsch...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1669273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1669273</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 24 Feb 2009 12:18:43 GMT</pubDate></item><item><title><![CDATA[Reply to Template + Polymorphie + Operatorenüberladung - Theoriefrage on Tue, 24 Feb 2009 12:55:58 GMT]]></title><description><![CDATA[<p>Und was meinst du damit genau?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1669300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1669300</guid><dc:creator><![CDATA[DMosig]]></dc:creator><pubDate>Tue, 24 Feb 2009 12:55:58 GMT</pubDate></item><item><title><![CDATA[Reply to Template + Polymorphie + Operatorenüberladung - Theoriefrage on Tue, 24 Feb 2009 15:58:59 GMT]]></title><description><![CDATA[<p>DMosig schrieb:</p>
<blockquote>
<p>Und was meinst du damit genau?</p>
</blockquote>
<p>schau dir std::swap an und dann schau dir deine lösung an.</p>
<p>du brauchst keine klassen, virtuelle funktionen, etc. du brauchst einfach nur templates. der typ der variablen steht nämlich zur compilezeit fest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1669454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1669454</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 24 Feb 2009 15:58:59 GMT</pubDate></item></channel></rss>