<?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[Vererbte Klasse -&amp;gt; Zeiger Problem]]></title><description><![CDATA[<p>Guten Tag,<br />
ich habe ein Problem bei der Erstellung eines Objektes auf eine Klasse.<br />
Ich habe 2 Klassen, wobei eine davon vererbt ist:</p>
<pre><code class="language-cpp">class k1{
	public:
	int a;

	int aa(){
		cout &lt;&lt; &quot;aa&quot;;
	}
};
class k2 : public k1{
	public:
	int b;

	int bb(){
		cout &lt;&lt; &quot;bb&quot;;
	}
};
</code></pre>
<p>Nun möchte ich das Objekt so erstellen, dass der Pointer zuerst auf Klasse1 zeigt und danach auf Klasse2, so dass ich Zugriff auf die Methoden &amp; Attribute der Klasse1 habe.<br />
Ich habe es so versucht:</p>
<pre><code class="language-cpp">k1* asdf;
k1 = new k2;
</code></pre>
<p>Jedoch habe ich weiterhin nur Zugriff auf die Attribute &amp; Methoden der 1sten Klasse. Der Konstruktor von Klasse2 wird aufgerufen.<br />
Was mache ich falsch ?<br />
Bin über jede Hilfe/Ansatz dankbar.</p>
<p>MfG<br />
Inco</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/229180/vererbte-klasse-gt-zeiger-problem</link><generator>RSS for Node</generator><lastBuildDate>Mon, 28 Sep 2026 04:46:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/229180.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 08 Dec 2008 15:51:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vererbte Klasse -&amp;gt; Zeiger Problem on Mon, 08 Dec 2008 15:51:22 GMT]]></title><description><![CDATA[<p>Guten Tag,<br />
ich habe ein Problem bei der Erstellung eines Objektes auf eine Klasse.<br />
Ich habe 2 Klassen, wobei eine davon vererbt ist:</p>
<pre><code class="language-cpp">class k1{
	public:
	int a;

	int aa(){
		cout &lt;&lt; &quot;aa&quot;;
	}
};
class k2 : public k1{
	public:
	int b;

	int bb(){
		cout &lt;&lt; &quot;bb&quot;;
	}
};
</code></pre>
<p>Nun möchte ich das Objekt so erstellen, dass der Pointer zuerst auf Klasse1 zeigt und danach auf Klasse2, so dass ich Zugriff auf die Methoden &amp; Attribute der Klasse1 habe.<br />
Ich habe es so versucht:</p>
<pre><code class="language-cpp">k1* asdf;
k1 = new k2;
</code></pre>
<p>Jedoch habe ich weiterhin nur Zugriff auf die Attribute &amp; Methoden der 1sten Klasse. Der Konstruktor von Klasse2 wird aufgerufen.<br />
Was mache ich falsch ?<br />
Bin über jede Hilfe/Ansatz dankbar.</p>
<p>MfG<br />
Inco</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1627075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1627075</guid><dc:creator><![CDATA[IncogNito]]></dc:creator><pubDate>Mon, 08 Dec 2008 15:51:22 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbte Klasse -&amp;gt; Zeiger Problem on Mon, 08 Dec 2008 16:00:48 GMT]]></title><description><![CDATA[<p>Wenn dein Objekt vom Typ k1 ist, hast du natürlich auch nur Zugriff auf die Methoden von k1. Wenn du Zugriff auf die Methoden von k2 haben willst musst du nach k2 casten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1627084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1627084</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 08 Dec 2008 16:00:48 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbte Klasse -&amp;gt; Zeiger Problem on Mon, 08 Dec 2008 16:16:38 GMT]]></title><description><![CDATA[<p>IncogNito schrieb:</p>
<blockquote>
<p>Jedoch habe ich weiterhin nur Zugriff auf die Attribute &amp; Methoden der 1sten Klasse. Der Konstruktor von Klasse2 wird aufgerufen.<br />
Was mache ich falsch ?</p>
</blockquote>
<p>Grundsätzlich kannst du (in nahezu jeder mir bekannten Sprache) auch nur auf das Zugreifen was du angibst. Wenn du einen Zeiger auf einen Typ k1 hast, kannst du auch nur dessen Schnittstelle verwenden.</p>
<p>Ganz davon abgesehen:<br />
1. Man sollte öffentliche Membervariablen vermeiden<br />
2. NIEMALS using namespace im Header verwenden!<br />
3. Basisklassen sollten möglichst einen virtuellen Destruktor besitzen (Sonst kann es sein, das ein Objekt das über einen Basisklassenzeiger gelöscht wird, nicht vollständig aufgeräumt wird).</p>
<p>Was aber möglich ist, ist mit virtuellen Funktionen die &quot;richtige&quot; Implementierung zu verwenden.</p>
<pre><code class="language-cpp">class k1{
    public:
      virtual void foo() {
          std::cout &lt;&lt; &quot;aa&quot;;
      }
      virtual ~k1() {}
};
class k2 : public k1{
    public:
      void foo(){
        std::cout &lt;&lt; &quot;bb&quot;;
      }
}; 

int main()
{
    k1* a = new k2;
    a-&gt;foo();
    delete a;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1627096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1627096</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 08 Dec 2008 16:16:38 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbte Klasse -&amp;gt; Zeiger Problem on Mon, 08 Dec 2008 16:30:03 GMT]]></title><description><![CDATA[<p>EDIT: mal wieder zu lange gebraucht. <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="😉"
    /> Ich lass es einfach mal stehen.<br />
----------------------------</p>
<p>... oder (was besser als Casten und/oder vermutlich von Dir gemeint ist): Polymorphie verwenden.</p>
<p>IncogNito schrieb:</p>
<blockquote>
<p>...<br />
Nun möchte ich das Objekt so erstellen, dass der Pointer zuerst auf Klasse1 zeigt und danach auf Klasse2, so dass ich Zugriff auf die Methoden &amp; Attribute der Klasse1 habe....</p>
</blockquote>
<p>Der klassische (und vom Sprachstandard unterstützte) Weg ist, in k1 bereits festzulegen, welche Schnittstelle seine &quot;Erben&quot; unterstützen werden:</p>
<pre><code class="language-cpp">struct k1{
   int a;
   int aa(){ cout &lt;&lt; &quot;aa&quot;; }
   virtual int bb() = 0; // sagt: &quot;Wer von mir erbt, soll das hier implementieren&quot; und
   // &quot;ohne das zu implementieren, kann man mich nicht erzeugen&quot;
};

struct k2 : k1{
   int b;
   int bb(){ cout &lt;&lt; &quot;bb&quot;; }
};
</code></pre>
<p>Das ist auch konsistent mit dem, was man mit &quot;Vererbung&quot; eigentlich ausdrücken möchte: Eine &quot;Ist-ein&quot;-Relation - &quot;ein k2-Objekt IST EIN k1-Objekt&quot;.</p>
<p>Angewendet würde es dann:</p>
<pre><code class="language-cpp">k1* asdf = new k2; // natürlich wird hier AUCH der k2-Konstruktor aufgerufen
      // aber eben AUCH der k1-Konstruktor

   asdf-&gt;aa(); // k1::aa()
   asdf-&gt;bb(); // k2::bb()

   cout &lt;&lt; asdf-&gt;b; // -&gt; Compile-Fehler; asdf sagt nur zu, auf ein k1 zu zeigen.
</code></pre>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1627098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1627098</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 08 Dec 2008 16:30:03 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbte Klasse -&amp;gt; Zeiger Problem on Mon, 08 Dec 2008 21:24:15 GMT]]></title><description><![CDATA[<p>Vielen Dank an alle für die hilfreichen Tips + Beispiele. <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="🙂"
    /><br />
Mein Problem war das -&gt; virtual, weil ich nicht gewusst habe das das damit zusammenhängt. Danke nochmal! <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>Gruß Inco</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1627303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1627303</guid><dc:creator><![CDATA[IncogNito]]></dc:creator><pubDate>Mon, 08 Dec 2008 21:24:15 GMT</pubDate></item></channel></rss>