<?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[STL Container und die liebe Vererbung]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe mir gerade ähnliche Basisklassen gebastelt und stelle diese Beispielhaft dar:</p>
<pre><code class="language-cpp">class Elem
{
public:
	int a;
	int b;
	string str;
public:
	Elem();
	virtual Elem;

	// diverse virtuelle Methoden bzw. &quot;normale&quot; Methoden
};
</code></pre>
<pre><code class="language-cpp">class ElemVec : public vector&lt;Elem&gt;
{
	ElemVec ();
	virtual ElemVec ;

	// und auch hier diverse virtuelle Methoden bzw. &quot;normale&quot; Methoden die auf die Elem-MemberMethoden zugreifen bzw. auch auf die Membervariablen von Elem
};
</code></pre>
<p>Da die beiden Klassen für mich eine Basis sind und einiges darauf aufbaut, möchte ich nun von der Klasse Elem ableiten und zb. in der ElemList bzw. in einer Ableitung dieser weiter verwenden können:</p>
<pre><code class="language-cpp">class BigElem : public Elem
{
public:
	int c;
	int d

public:
	BigElem ();
	virtual BigElem ;

	// hier werden einige virtuelle Methoden überschrieben, neue erzeugt usw.};
</code></pre>
<p>so und <strong>nun komm ich zu meinem Hauptproblem</strong>, wie übergebe ich nun der Klasse ElemVec die abgeleite Klasse BigElem bzw. wie schaut die Ableitung von ElemVec aus?</p>
<pre><code class="language-cpp">class BigElemVec : public ElemVec // hmm so kann dies doch nicht gehn? da hab ich ja dann noch immer die alte ursprüngliche Basisklasse Elem als VectorElement  :confused:
</code></pre>
<p>Mir ist klar, dass ich einen vector von Elem* machen könnte, nur dann kann ich das Speichermanagement der STL Container nicht verwenden, was mir doch irgendwie sehr sympatisch wäre <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="🙂"
    /></p>
<p>DANKE für eure Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/134019/stl-container-und-die-liebe-vererbung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 07:46:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/134019.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Jan 2006 06:37:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to STL Container und die liebe Vererbung on Mon, 23 Jan 2006 07:36:20 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe mir gerade ähnliche Basisklassen gebastelt und stelle diese Beispielhaft dar:</p>
<pre><code class="language-cpp">class Elem
{
public:
	int a;
	int b;
	string str;
public:
	Elem();
	virtual Elem;

	// diverse virtuelle Methoden bzw. &quot;normale&quot; Methoden
};
</code></pre>
<pre><code class="language-cpp">class ElemVec : public vector&lt;Elem&gt;
{
	ElemVec ();
	virtual ElemVec ;

	// und auch hier diverse virtuelle Methoden bzw. &quot;normale&quot; Methoden die auf die Elem-MemberMethoden zugreifen bzw. auch auf die Membervariablen von Elem
};
</code></pre>
<p>Da die beiden Klassen für mich eine Basis sind und einiges darauf aufbaut, möchte ich nun von der Klasse Elem ableiten und zb. in der ElemList bzw. in einer Ableitung dieser weiter verwenden können:</p>
<pre><code class="language-cpp">class BigElem : public Elem
{
public:
	int c;
	int d

public:
	BigElem ();
	virtual BigElem ;

	// hier werden einige virtuelle Methoden überschrieben, neue erzeugt usw.};
</code></pre>
<p>so und <strong>nun komm ich zu meinem Hauptproblem</strong>, wie übergebe ich nun der Klasse ElemVec die abgeleite Klasse BigElem bzw. wie schaut die Ableitung von ElemVec aus?</p>
<pre><code class="language-cpp">class BigElemVec : public ElemVec // hmm so kann dies doch nicht gehn? da hab ich ja dann noch immer die alte ursprüngliche Basisklasse Elem als VectorElement  :confused:
</code></pre>
<p>Mir ist klar, dass ich einen vector von Elem* machen könnte, nur dann kann ich das Speichermanagement der STL Container nicht verwenden, was mir doch irgendwie sehr sympatisch wäre <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="🙂"
    /></p>
<p>DANKE für eure Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/973562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/973562</guid><dc:creator><![CDATA[taff]]></dc:creator><pubDate>Mon, 23 Jan 2006 07:36:20 GMT</pubDate></item><item><title><![CDATA[Reply to STL Container und die liebe Vererbung on Mon, 23 Jan 2006 06:42:32 GMT]]></title><description><![CDATA[<p>ueber template nennst du dem elemvec den typ des elements.</p>
<p>wenn das von mir jetzt schwachsinn war, einfach ueberlesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/973563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/973563</guid><dc:creator><![CDATA[c.rackwitz]]></dc:creator><pubDate>Mon, 23 Jan 2006 06:42:32 GMT</pubDate></item><item><title><![CDATA[Reply to STL Container und die liebe Vererbung on Mon, 23 Jan 2006 07:04:42 GMT]]></title><description><![CDATA[<p>c.rackwitz schrieb:</p>
<blockquote>
<p>ueber template nennst du dem elemvec den typ des elements.</p>
<p>wenn das von mir jetzt schwachsinn war, einfach ueberlesen.</p>
</blockquote>
<p>hmm naja ich weiß jetzt nicht ganz genau was du damit meinst, aber ich habe auch schon daran gedacht, dass ich ein ElemVec-Template mache, nur ich bräuchte dann auch schon im ElemVec-Tamplate zugriff auf die Members von der Klasse ELem. <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="🙄"
    /> hmm da ich eigentlich mich in sachen templates programmierung nicht so richtig auskenne, wäre hier die Frage ob dies überhaupt möglich ist, dass man so eine Art Template macht die nur mit der Basisklasse Elem bzw. mit abgeleiteten Klassen arbeitet?<br />
aja, falls ich nur Müll schreibe mit meinem Überlegungen, bitte nehmt es mir nicht böse, ich denke nur laut <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/973575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/973575</guid><dc:creator><![CDATA[taff]]></dc:creator><pubDate>Mon, 23 Jan 2006 07:04:42 GMT</pubDate></item><item><title><![CDATA[Reply to STL Container und die liebe Vererbung on Mon, 23 Jan 2006 10:12:36 GMT]]></title><description><![CDATA[<p>Du kannst die Vererbung nicht so einfach auf Container übertragen - Ein Vektor von BigElem ist <strong>kein</strong> Vektor von Elem (in letzteren könntest du z.B. NamedElem's reinpacken, in ersteren nicht). Und für Polymorphie führt kein Weg daran vorbei, Pointer zu verwenden (falls du dir um die Speichervewaltung Sorgen machst, nimm Smart-Pointer dafür).</p>
<p>PS: Übrigens sind die STL-Container sowieso nicht dafür entworfen worden, etwas von ihnen abzuleiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/973677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/973677</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Mon, 23 Jan 2006 10:12:36 GMT</pubDate></item><item><title><![CDATA[Reply to STL Container und die liebe Vererbung on Mon, 23 Jan 2006 10:29:59 GMT]]></title><description><![CDATA[<p>Dein Ansatz lässt sich über die Smartpointer lösen.<br />
Aber wie schon gesagt, der Vererbung an sich ist schon unglücklich.<br />
Ich halte eine Template klasse ElemVec für die bessere Lösung in der Form:</p>
<pre><code class="language-cpp">template&lt;class T&gt; class ElemVec
{ private:
    std::vector&lt;T&gt; MyVec;
};
</code></pre>
<p>Nur mischen von verschiedenen Elementen in einen Vector geht dann nicht.<br />
Aber auch wenn das sein muß ist diese Klassenform (dann mit Smartpointern ohne Template) der Vererbung vorzuziehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/973694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/973694</guid><dc:creator><![CDATA[gh]]></dc:creator><pubDate>Mon, 23 Jan 2006 10:29:59 GMT</pubDate></item><item><title><![CDATA[Reply to STL Container und die liebe Vererbung on Mon, 23 Jan 2006 10:49:14 GMT]]></title><description><![CDATA[<p>danke für die nützlichen tipps <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>also da ich in der zwischenzeit auch schon heftig am herumprobieren bin, bin ich auch eher für die template lösung!</p>
<p>was ich ja vor der erstellung meiner frage hier im forum nicht gewusst habe, dass man in templates auch auf members zugreifen kann, und somit das template &quot;template&lt;class T&gt; class ElemVec&quot; von meiner basisklasse Elem abhängig machen kann.</p>
<p>da ich mich gerade mit der sourcecode umstellung beschäftige, bin ich schon auf das nächste problem gestoßen, dass ich ja meine ausprogrammierten methoden im cpp nicht mehr verwenden kann. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> also geht nur noch die möglichkeit, sofort im header oder in der inline-datei, oder?</p>
<p>ps.: programmiere c++ unter linux</p>
]]></description><link>https://www.c-plusplus.net/forum/post/973712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/973712</guid><dc:creator><![CDATA[taff]]></dc:creator><pubDate>Mon, 23 Jan 2006 10:49:14 GMT</pubDate></item><item><title><![CDATA[Reply to STL Container und die liebe Vererbung on Mon, 23 Jan 2006 11:49:44 GMT]]></title><description><![CDATA[<p>taff schrieb:</p>
<blockquote>
<p>da ich mich gerade mit der sourcecode umstellung beschäftige, bin ich schon auf das nächste problem gestoßen, dass ich ja meine ausprogrammierten methoden im cpp nicht mehr verwenden kann. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> also geht nur noch die möglichkeit, sofort im header oder in der inline-datei, oder?</p>
</blockquote>
<p>Ja, Template-Definitionen gehören immer in die Header (bzw. eine andere Datei, die du per #include einbindest) - das liegt daran, daß der Compiler Typ-Informationen und Quelltext an einer Stelle benötigt, um ausführbaren Code zu erzeugen.</p>
<p>(wenn du ein Template in eine eigene CPP-Datei packst, hat er nicht die Möglichkeit, das zusammenzubauen: beim Compilieren des Templates weiß er nicht, was er für T einsetzen muß, beim Compilieren des Anwendungscodes kennt er den Quelltext der Funktion nicht)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/973778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/973778</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 23 Jan 2006 11:49:44 GMT</pubDate></item><item><title><![CDATA[Reply to STL Container und die liebe Vererbung on Mon, 23 Jan 2006 11:57:29 GMT]]></title><description><![CDATA[<p>so nun ist mir alles klar und eigentlich bei genauerer betrachtung alles sehr logisch <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>DANKE nochmals an alle für die tolle hilfe! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/973787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/973787</guid><dc:creator><![CDATA[taff]]></dc:creator><pubDate>Mon, 23 Jan 2006 11:57:29 GMT</pubDate></item><item><title><![CDATA[Reply to STL Container und die liebe Vererbung on Mon, 23 Jan 2006 13:04:04 GMT]]></title><description><![CDATA[<p>gh schrieb:</p>
<blockquote>
<p>Dein Ansatz lässt sich über die Smartpointer lösen.<br />
Aber wie schon gesagt, der Vererbung an sich ist schon unglücklich.<br />
Ich halte eine Template klasse ElemVec für die bessere Lösung in der Form:</p>
<pre><code class="language-cpp">template&lt;class T&gt; class ElemVec
{ private:
    std::vector&lt;T&gt; MyVec;
};
</code></pre>
<p>Nur mischen von verschiedenen Elementen in einen Vector geht dann nicht.<br />
Aber auch wenn das sein muß ist diese Klassenform (dann mit Smartpointern ohne Template) der Vererbung vorzuziehen.</p>
</blockquote>
<p>Wobei man hier auch in Erwägung ziehen könnte private abzuleiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/973858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/973858</guid><dc:creator><![CDATA[Any]]></dc:creator><pubDate>Mon, 23 Jan 2006 13:04:04 GMT</pubDate></item><item><title><![CDATA[Reply to STL Container und die liebe Vererbung on Mon, 23 Jan 2006 13:07:10 GMT]]></title><description><![CDATA[<p>Any schrieb:</p>
<blockquote>
<p>gh schrieb:</p>
<blockquote>
<p>Dein Ansatz lässt sich über die Smartpointer lösen.<br />
Aber wie schon gesagt, der Vererbung an sich ist schon unglücklich.<br />
Ich halte eine Template klasse ElemVec für die bessere Lösung in der Form:</p>
<pre><code class="language-cpp">template&lt;class T&gt; class ElemVec
{ private:
    std::vector&lt;T&gt; MyVec;
};
</code></pre>
<p>Nur mischen von verschiedenen Elementen in einen Vector geht dann nicht.<br />
Aber auch wenn das sein muß ist diese Klassenform (dann mit Smartpointern ohne Template) der Vererbung vorzuziehen.</p>
</blockquote>
<p>Wobei man hier auch in Erwägung ziehen könnte private abzuleiten.</p>
</blockquote>
<p>Nein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/973861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/973861</guid><dc:creator><![CDATA[falsch!]]></dc:creator><pubDate>Mon, 23 Jan 2006 13:07:10 GMT</pubDate></item></channel></rss>