<?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[Ersetzbarkeit, Untertypen ?]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe eine Klasse CTermin:</p>
<pre><code>class CTermin
{
	CTermin(const unsigned int datum, const unsigned int beginn, const unsigned int ende, std::vector &lt;CRessource*&gt; ressourcen)
		: m_datum(datum), m_beginn(beginn), m_ende(ende), m_ressourcen(ressourcen){}

	private:
		const unsigned int m_datum;				
		const unsigned int m_beginn;			
		const unsigned int m_ende;				
		std::vector &lt;CRessource*&gt; m_ressourcen;	
};
</code></pre>
<p>und davon eine Klasse CTerminG abgeleitet, die ein Memberattribut hinzufügt:</p>
<pre><code>class CTerminG : public CTermin
{
	public:
		CTerminG(const unsigned int datum, const unsigned int beginn, const unsigned int ende, std::vector &lt;CRessource*&gt; ressourcen, std::list &lt;CMitarbeiterP*&gt; teilnehmer)
     : CTermin(datum, beginn, ende, ressourcen), m_teilnehmer(teilnehmer) {}

	private:
		std::list &lt;CMitarbeiterP*&gt; m_teilnehmer;
};
</code></pre>
<p>So jetzt hab ich im meinem Programm öfters einen vector mit Terminen. Was muss ich jetzt tun um so einen vector sowohl mit &lt;CTermin*&gt;, als auch mit &lt;CTerminG*&gt; füllen zu können.<br />
Ich komme einfach nicht dahinter, aber das muss doch möglich sein, oder?!</p>
<p>sg,<br />
soad</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/180478/ersetzbarkeit-untertypen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 20:33:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180478.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 May 2007 11:44:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ersetzbarkeit, Untertypen ? on Thu, 03 May 2007 11:44:57 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe eine Klasse CTermin:</p>
<pre><code>class CTermin
{
	CTermin(const unsigned int datum, const unsigned int beginn, const unsigned int ende, std::vector &lt;CRessource*&gt; ressourcen)
		: m_datum(datum), m_beginn(beginn), m_ende(ende), m_ressourcen(ressourcen){}

	private:
		const unsigned int m_datum;				
		const unsigned int m_beginn;			
		const unsigned int m_ende;				
		std::vector &lt;CRessource*&gt; m_ressourcen;	
};
</code></pre>
<p>und davon eine Klasse CTerminG abgeleitet, die ein Memberattribut hinzufügt:</p>
<pre><code>class CTerminG : public CTermin
{
	public:
		CTerminG(const unsigned int datum, const unsigned int beginn, const unsigned int ende, std::vector &lt;CRessource*&gt; ressourcen, std::list &lt;CMitarbeiterP*&gt; teilnehmer)
     : CTermin(datum, beginn, ende, ressourcen), m_teilnehmer(teilnehmer) {}

	private:
		std::list &lt;CMitarbeiterP*&gt; m_teilnehmer;
};
</code></pre>
<p>So jetzt hab ich im meinem Programm öfters einen vector mit Terminen. Was muss ich jetzt tun um so einen vector sowohl mit &lt;CTermin*&gt;, als auch mit &lt;CTerminG*&gt; füllen zu können.<br />
Ich komme einfach nicht dahinter, aber das muss doch möglich sein, oder?!</p>
<p>sg,<br />
soad</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278063</guid><dc:creator><![CDATA[soad]]></dc:creator><pubDate>Thu, 03 May 2007 11:44:57 GMT</pubDate></item><item><title><![CDATA[Reply to Ersetzbarkeit, Untertypen ? on Thu, 03 May 2007 11:48:57 GMT]]></title><description><![CDATA[<p>Dafür must du garnichts tun, das geht einfach so!?</p>
<p>wenn du jetzt methoden aus einem TerminG aufrufst müssen die natürlich in Termin auch existieren und (wichtig!) in terminG muss ein virtual davor, sonst wird die methode aus Termin ausgeführt (in Termin muss glaube ich auch ein virtual davor)</p>
<p>also zB:</p>
<pre><code class="language-cpp">virtual void getString()
{
    ...
}
</code></pre>
<p>Aber wenn du eine list&lt;Termin <em>&gt; hast kannst du die mit Termin</em> und TerminG* füllen, garkein Problem (müssen aber pointer sein, vllt scheiterts daran?!)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278066</guid><dc:creator><![CDATA[Mene]]></dc:creator><pubDate>Thu, 03 May 2007 11:48:57 GMT</pubDate></item><item><title><![CDATA[Reply to Ersetzbarkeit, Untertypen ? on Thu, 03 May 2007 11:49:47 GMT]]></title><description><![CDATA[<p>Polymorphie nutzen:</p>
<pre><code class="language-cpp">vector&lt;CTermin*&gt; Temine;
Termine.push_back(new Temin(...));
Termine.push_back(new TerminG(...));
</code></pre>
<p>Wenn du auf spezifische Bestandteile der abgeleiteten Klasse zugreifen willst, mußt du den Wert per dynamic_cast&lt;&gt; umcasten (oder du definierst dir in der Basisklasse virtuelle Methoden für die nötigen Datenzugriffe).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278068</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 03 May 2007 11:49:47 GMT</pubDate></item><item><title><![CDATA[Reply to Ersetzbarkeit, Untertypen ? on Thu, 03 May 2007 13:42:52 GMT]]></title><description><![CDATA[<p>Danke erstmals, aber ich kann´s leider nicht testen, weil ich mit dieser neuen Unterklasse CTerminG ein Spirale in meiner Include-Hierarchie habe. Bekomme immer den Fehler &quot;fatal error C1014: Zu viele Headerdateien: Tiefe = 1024&quot;, weiss aber nicht wie ich das auflösen soll <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>
<p>Habe folgende Include-Hierarchie:</p>
<p>CRessource -&gt; CTermin -&gt; CTerminkalender -&gt; CMitarbeiter -&gt; CMitarbeiterP(abstrakt) -&gt; davon dann noch abgeleitet die speziellen Mitarbeitertypen.</p>
<p>Jetzt habe ich aber die Klasse CTerminG mit dem neuen Attribut der CMitarbeiterP-Liste, also habe ich dort CTermin &amp; CMitarbeiterP inkludiert, aber wenn ich CTerminG auch in CTerminkalender inkludiere, dann habe ich diese Schleife :(.</p>
<p>Aber das muss ich doch eigentlich so machen, oder ?!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278128</guid><dc:creator><![CDATA[soad]]></dc:creator><pubDate>Thu, 03 May 2007 13:42:52 GMT</pubDate></item><item><title><![CDATA[Reply to Ersetzbarkeit, Untertypen ? on Thu, 03 May 2007 15:12:42 GMT]]></title><description><![CDATA[<p>Stichworte: Include-Guard und Forward-Deklaration</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278185</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 03 May 2007 15:12:42 GMT</pubDate></item><item><title><![CDATA[Reply to Ersetzbarkeit, Untertypen ? on Thu, 03 May 2007 18:36:58 GMT]]></title><description><![CDATA[<p>mmmh, #ifndef &amp; #define hab ich eigentlich in jedem header-file. ich habs noch mit #pragma once versucht und die includes nach dem #define, aber das funktioniert alles nicht :(. könntest du mir bitte vielleicht noch einen tipp geben?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278319</guid><dc:creator><![CDATA[soad]]></dc:creator><pubDate>Thu, 03 May 2007 18:36:58 GMT</pubDate></item><item><title><![CDATA[Reply to Ersetzbarkeit, Untertypen ? on Fri, 04 May 2007 07:33:18 GMT]]></title><description><![CDATA[<p>Nachdem der Präprozessor durch ist, hat er die #includes in einer festen Reihenfolge (so, wie er sie gefunden hat) in deine Übersetzungseinheit zusammengefügt. Wenn du da eine ringartige Reihung aufgebaut hast, wird die entweder durchbrochen oder führt zu einer Endlos-Rekursion, die der Präprozessor irgendwann unterbricht. Die Lösung dazu lautet &quot;Forward Deklaration&quot; - solange du nur den Namen der Klasse benötigst, brauchst du nicht den kompletten Header, sondern &quot;nur&quot; ein (z.B.) 'class CMitarbeiterP;'.</p>
<p>(das reicht aus, um Zeiger oder Referenzen auf diesen Typ anzulegen oder ihn als Parameter/Rückgabewert einer Funktion anzugeben. In der zugehörigen CPP-Datei brauchst du dann die komplette Definition der Klasse)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278541</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 04 May 2007 07:33:18 GMT</pubDate></item></channel></rss>