<?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[Array von elternklasse mit kindern füllen, typecast?]]></title><description><![CDATA[<p>Hallo!</p>
<p>ich habe ein problem mit selbsterstellten klassen.Und zwar habe ich eine Elternklase, die über 2 Kinder verfügt, die die elternklasse um eine je eine methode erweitertn.</p>
<pre><code>class eltern
{
	public:
		eltern(void);
		virtual ~eltern(void);
		virtual void tuwas(int i){;};
	protected:
		int a;
		double b;
};

class kind1 : public eltern
{
	public:
	       void setkind1attribut(int i);
               void tuwas(int i);
	private:
		int kind1attribut;
};

class kind2 : public eltern
{
	public:
	       void setkind2attribut(int i);
               void tuwas(int i);
	private:
		int kind2attribut;
};
</code></pre>
<p>wenn ich jetzt ein Array: eltern test[5] erstelle, und das beliebig mit kind1 / kind2 fülle, wie kann ich dann auf die methoden der kinder zugreifen?bzw wie kann ich einen typecast von einem eltern-element aus dem array auf ein kind1 bzw kind2 machen? muss ich dafür in den kindern eine spezielle methode schreiben, die mir einen typecast ermöglicht?</p>
<p>Vielen dank schonmal für hilfe!</p>
<p>MfG</p>
<p>Quaki</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/139185/array-von-elternklasse-mit-kindern-füllen-typecast</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 10:38:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/139185.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 04 Mar 2006 11:34:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Array von elternklasse mit kindern füllen, typecast? on Sat, 04 Mar 2006 11:34:19 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>ich habe ein problem mit selbsterstellten klassen.Und zwar habe ich eine Elternklase, die über 2 Kinder verfügt, die die elternklasse um eine je eine methode erweitertn.</p>
<pre><code>class eltern
{
	public:
		eltern(void);
		virtual ~eltern(void);
		virtual void tuwas(int i){;};
	protected:
		int a;
		double b;
};

class kind1 : public eltern
{
	public:
	       void setkind1attribut(int i);
               void tuwas(int i);
	private:
		int kind1attribut;
};

class kind2 : public eltern
{
	public:
	       void setkind2attribut(int i);
               void tuwas(int i);
	private:
		int kind2attribut;
};
</code></pre>
<p>wenn ich jetzt ein Array: eltern test[5] erstelle, und das beliebig mit kind1 / kind2 fülle, wie kann ich dann auf die methoden der kinder zugreifen?bzw wie kann ich einen typecast von einem eltern-element aus dem array auf ein kind1 bzw kind2 machen? muss ich dafür in den kindern eine spezielle methode schreiben, die mir einen typecast ermöglicht?</p>
<p>Vielen dank schonmal für hilfe!</p>
<p>MfG</p>
<p>Quaki</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008328</guid><dc:creator><![CDATA[Quaki]]></dc:creator><pubDate>Sat, 04 Mar 2006 11:34:19 GMT</pubDate></item><item><title><![CDATA[Reply to Array von elternklasse mit kindern füllen, typecast? on Sat, 04 Mar 2006 12:01:34 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Was soll das da sein:</p>
<pre><code class="language-cpp">virtual void tuwas(int i){;};
</code></pre>
<p>Änder das lieber in:</p>
<pre><code class="language-cpp">virtual void tuwas( int i ) = 0;
</code></pre>
<p>Ebenso wie diese Methoden:</p>
<pre><code class="language-cpp">void setkind1attribut(int i);
void setkind1attribut(int i);
</code></pre>
<p>Eine virtuelle Methode + zwei Überladungen.<br />
Dann musst du nicht entscheiden ob es sich um Kind1 oder Kind2 handelt.</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008342</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Sat, 04 Mar 2006 12:01:34 GMT</pubDate></item><item><title><![CDATA[Reply to Array von elternklasse mit kindern füllen, typecast? on Sat, 04 Mar 2006 12:08:55 GMT]]></title><description><![CDATA[<p>Wenn Du auf eine vererbte Methode zugreifen willst, die in der spezifizierten Klasse evtl. neu implementiert ist, dann verwende auf jeden Fall virtual, dann wird die entsprechend richtige Methode automatisch aufgerufen.<br />
Wenn Du auf Methoden zugreifen willst, die in der Eltern-Klasse nicht definiert sind, dann musst Du casten soweit ich weiß.<br />
Allerdings ist das unschön, da sollte man lieber eine virtuelle Methode definieren, die in allen Spezialisierungen überschrieben wird, falls nötig und die entsprechenden anderen Methoden aufruft, die in der Elternklasse evtl. gar nicht vorhanden sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008348</guid><dc:creator><![CDATA[mantiz]]></dc:creator><pubDate>Sat, 04 Mar 2006 12:08:55 GMT</pubDate></item><item><title><![CDATA[Reply to Array von elternklasse mit kindern füllen, typecast? on Sat, 04 Mar 2006 12:15:27 GMT]]></title><description><![CDATA[<p>Okay, gut das du mich wiederholst!<br />
Als Kontainer würde sich ja etwas wie vektor o.ä. anbieten.</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008351</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Sat, 04 Mar 2006 12:15:27 GMT</pubDate></item><item><title><![CDATA[Reply to Array von elternklasse mit kindern füllen, typecast? on Sat, 04 Mar 2006 12:29:56 GMT]]></title><description><![CDATA[<p>David_pb schrieb:</p>
<blockquote>
<p>Okay, gut das du mich wiederholst!</p>
</blockquote>
<p>ups! <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/1008364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008364</guid><dc:creator><![CDATA[mantiz]]></dc:creator><pubDate>Sat, 04 Mar 2006 12:29:56 GMT</pubDate></item><item><title><![CDATA[Reply to Array von elternklasse mit kindern füllen, typecast? on Sat, 04 Mar 2006 12:32:44 GMT]]></title><description><![CDATA[<p>Du kannst abgeleitete Klassen nicht in nem C-Array unterbringen, da diese sich in der Größe von der Basisklasse unterscheiden (können).</p>
<p>Entweder du machst nen Array aus Zeigern (eltern*[5]) oder (besser) einen std::vector&lt;eltern*&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008367</guid><dc:creator><![CDATA[Any]]></dc:creator><pubDate>Sat, 04 Mar 2006 12:32:44 GMT</pubDate></item><item><title><![CDATA[Reply to Array von elternklasse mit kindern füllen, typecast? on Sat, 04 Mar 2006 12:34:51 GMT]]></title><description><![CDATA[<p>Danke erstmal für die schnellen Antworten!</p>
<p>Ich würde ja gerne nen Typecast machen, aber der Compiler lässt micht nicht...</p>
<p>muss ich in meiner Unterklasse eine bestimmte methode implementieren, um überhaupt einen typecast machen zu können?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008369</guid><dc:creator><![CDATA[Quaki]]></dc:creator><pubDate>Sat, 04 Mar 2006 12:34:51 GMT</pubDate></item><item><title><![CDATA[Reply to Array von elternklasse mit kindern füllen, typecast? on Sat, 04 Mar 2006 12:40:05 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Warum willst du casten? Eigentlich sollte man NIE casten, nur dann wenns wirklich nich anders Möglich ist.</p>
<pre><code class="language-cpp">class Test
{
  virtual void setAttribute() = 0;
}

class Test1 : public Test
{
  void setAttribute() {}
}

class Test2 : public Test
{
  void setAttribute() {}
}

//..
std::vector&lt; Test *&gt; v;

v.push_back( new Test1 );
// ...
</code></pre>
<p>So brauchst du keinen cast sondern rufst jeweils immer einfach iterator.setAttribute() auf, fertig.</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008372</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Sat, 04 Mar 2006 12:40:05 GMT</pubDate></item><item><title><![CDATA[Reply to Array von elternklasse mit kindern füllen, typecast? on Sat, 04 Mar 2006 12:49:00 GMT]]></title><description><![CDATA[<p>Also das Problem ist, dass wir zum einen vector in der Vorlesung nicht behandelt haben, und deshalb auch möglichst nicht benutzen sollen, und 2. das es in den beiden unterklassen funktionen gibt, die in der Bassiklasse nicht vorhanden sind/sein sollen.</p>
<p>Wie sähe denn eine lösung mit pointern aus?</p>
<p>Sehe ich das richtig, das ich 2 Kontainer haben muss, da ich ja nur so die attribute speichern kann, die zwar in den unterklassen nicht aber in der basisklasse vorkommen?!</p>
<p>danke für die hilfe schonmal im vorraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008375</guid><dc:creator><![CDATA[Quaki]]></dc:creator><pubDate>Sat, 04 Mar 2006 12:49:00 GMT</pubDate></item><item><title><![CDATA[Reply to Array von elternklasse mit kindern füllen, typecast? on Sat, 04 Mar 2006 12:53:31 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Wenn du weist was für ein Typ dein Pointer ist, kannst du diesen casten und die entsperchenden Funktionen aufrufen, leider weist du das nicht.<br />
Du kannst mit dem operator typeid den Typ zwar rausbekommen, zum einen muss dann aber die RTTI verfügbar sein zum anderen hattet ihr das wohl auch nicht in der Vorlesung.</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008376</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Sat, 04 Mar 2006 12:53:31 GMT</pubDate></item><item><title><![CDATA[Reply to Array von elternklasse mit kindern füllen, typecast? on Sat, 04 Mar 2006 13:16:11 GMT]]></title><description><![CDATA[<p>Also wenn ich z.b. 10 Objekte der 2 Unterklassen hab, dann weiss ich schon ob das 1. vom typ 1 oder 2 ist, da der Anwender die Reihenfolge festlegt. Aber ich werde wohl wirklich nicht drum rum kommen, ein Array für Kinder1 und eins für Kinder2 zu machen, oder? Weil ich ja sonst die Attribute die nur in den Unterklassen vorhanden sind nicht speichern kann...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008403</guid><dc:creator><![CDATA[Quaki]]></dc:creator><pubDate>Sat, 04 Mar 2006 13:16:11 GMT</pubDate></item><item><title><![CDATA[Reply to Array von elternklasse mit kindern füllen, typecast? on Sat, 04 Mar 2006 13:47:50 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ne, wenn du weist an welcher stelle was für ein Typ steht kannst du auch casten...</p>
<pre><code class="language-cpp">Kind1 *p = static_cast&lt; Kind1 &gt;( array[ index ] );
p-&gt;tuirgendwas();
</code></pre>
<p>In array[ index ] muss natürlich wirklich der Typ &quot;Kind1&quot; vorhanden sein. Und außerdem ist casten sowiso gefährlich, kanns garnicht oft genug sagen. <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>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008438</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Sat, 04 Mar 2006 13:47:50 GMT</pubDate></item><item><title><![CDATA[Reply to Array von elternklasse mit kindern füllen, typecast? on Sat, 04 Mar 2006 13:51:11 GMT]]></title><description><![CDATA[<p>Mal nen kleines Beispiel für dich:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

struct Base
{
};

struct Derived1 : Base
{
  int getVal()
  {
     return 13;
  }
};

struct Derived2 : Base
{
  const char* getName()
  {
     return &quot;Hello World&quot;;
  }
};

int main()
{
  Base* objects[10];

  for( int i = 0; i &lt; 10; ++i )
  {
      if( i % 2 == 0 )
          objects[ i ] = new Derived1;
      else
          objects[ i ] = new Derived2;
  }

  for( int i = 0; i &lt; 10; ++i )
  {
      //rausfinden ob das Objekt ein Derived1 ist
      if( Derived1* p = dynamic_cast&lt; Derived1* &gt;( objects[ i ] ) )
          cout &lt;&lt; p-&gt;getVal() &lt;&lt; endl;
      else//wenn nicht ist es ein Derived2
      {
          Derived2* p = static_cast&lt; Derived2* &gt;( objects[ i ] );
          cout &lt;&lt; p-&gt;getName() &lt;&lt; endl;
      }
  }

  for( int i = 0; i &lt; 10; ++i )
     delete objects[ i ];
}
</code></pre>
<p>Allerdings glaube ich, dass dir noch nen paar allgemeine Grundlagen in Sachen Vererbung fehlen, oder ihr noch nicht genug gemacht habt damit du richtig damit umgehen kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008442</guid><dc:creator><![CDATA[Any]]></dc:creator><pubDate>Sat, 04 Mar 2006 13:51:11 GMT</pubDate></item><item><title><![CDATA[Reply to Array von elternklasse mit kindern füllen, typecast? on Sat, 04 Mar 2006 13:54:00 GMT]]></title><description><![CDATA[<p>Man sollte keine läglicheren Sachen dahinschreiben, hier mal ohne den Flüchtigkeitsfehlern (also nen funktionierendes Beispiel):</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

struct Base
{
	virtual ~Base(){}
};

struct Derived1 : Base
{
	int getVal()
	{
		return 13;
	}
};

struct Derived2 : Base
{
	const char* getName()
	{
		return &quot;Hello World&quot;;
	}
};

int main()
{
	Base* objects[10];

	for( int i = 0; i &lt; 10; ++i )
	{
		if( i % 2 == 0 )
			objects[ i ] = new Derived1;
		else
			objects[ i ] = new Derived2;
	}

	for( int i = 0; i &lt; 10; ++i )
	{
		//rausfinden ob das Objekt ein Derived1 ist
		if( Derived1* p = dynamic_cast&lt; Derived1* &gt;( objects[ i ] ) )
			cout &lt;&lt; p-&gt;getVal() &lt;&lt; endl;
		else//wenn nicht ist es ein Derived2
		{
			Derived2* p1 = static_cast&lt; Derived2* &gt;( objects[ i ] );
			cout &lt;&lt; p1-&gt;getName() &lt;&lt; endl;
		}
	}

	for( int i = 0; i &lt; 10; ++i )
		delete objects[ i ];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1008448</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008448</guid><dc:creator><![CDATA[Any]]></dc:creator><pubDate>Sat, 04 Mar 2006 13:54:00 GMT</pubDate></item><item><title><![CDATA[Reply to Array von elternklasse mit kindern füllen, typecast? on Sat, 04 Mar 2006 21:52:14 GMT]]></title><description><![CDATA[<p>Danke für das Beispiel, soweit hab ich das inzwischen auch verstanden.</p>
<p>was wäre denn jetzt wenn es in Derived1 ein attribut</p>
<pre><code>int val
</code></pre>
<p>gäbe, und in Derived2 ein attribut</p>
<pre><code>char[20] name
</code></pre>
<p>jeweils mit einer get und einer set methode.</p>
<p>kann ich das attribut überhaupt mit hilfe in einem Objekt auf das ich mit dem Base* Array zugreife speichern? oder geht das nur wenn ich 2Arrays Derived1[] und Derived2[] mache?</p>
<p>Mfg</p>
<p>Quaki</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008760</guid><dc:creator><![CDATA[Quaki]]></dc:creator><pubDate>Sat, 04 Mar 2006 21:52:14 GMT</pubDate></item><item><title><![CDATA[Reply to Array von elternklasse mit kindern füllen, typecast? on Sat, 04 Mar 2006 21:53:12 GMT]]></title><description><![CDATA[<p>Der Satz sollte richtig lauten:</p>
<p>kann ich das attribut überhaupt in einem Objekt auf das ich mit dem Base* Array zugreife speichern? oder geht das nur wenn ich 2Arrays Derived1[] und Derived2[] mache?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008762</guid><dc:creator><![CDATA[Quaki]]></dc:creator><pubDate>Sat, 04 Mar 2006 21:53:12 GMT</pubDate></item><item><title><![CDATA[Reply to Array von elternklasse mit kindern füllen, typecast? on Sat, 04 Mar 2006 23:09:49 GMT]]></title><description><![CDATA[<p>Wenn du nen Objekt von ner abgeleiteten Klasse mit nem Zeiger zur Basisklasse speicherst, dann steht dir auch nur die Schnittstelle der Basisklasse zur Verfügung, wenn dir die nicht genügen, musst du einen downcast machen, das heißt in der Vererbungshierachi nach unten (also abgleitete klassen) casten, das wäre bei Base dann Derived1 oder Derived2. Wenn du den Typ sicher kennst reicht nen static_cast, wenn du den Typ nicht (sicher) kennst, dann musst du mit dynamic_cast arbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008793</guid><dc:creator><![CDATA[Any]]></dc:creator><pubDate>Sat, 04 Mar 2006 23:09:49 GMT</pubDate></item></channel></rss>