<?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[Methoden in Vererbung]]></title><description><![CDATA[<p>Hallo Zusammen,</p>
<p>habe eine Frage bzgl. Vererbung in C++: Wenn man eine Methode in der Oberklasse deklariert in der Headerdatei, dann braucht man diese doch nicht nochmal in der headerdatei der Unterklasse zu deklarieren oder? Und falls Sie in der Oberklasse mit virtual deklariert wurde dann kann man Sie doch in den Unterklassen verschieden definieren, oder? Vllt. klingt die Frage komisch aber...</p>
<p>Danke im Voraus,</p>
<p>Jenny</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/314550/methoden-in-vererbung</link><generator>RSS for Node</generator><lastBuildDate>Sat, 01 Aug 2026 04:31:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/314550.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 06 Mar 2013 09:20:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Methoden in Vererbung on Wed, 06 Mar 2013 09:20:22 GMT]]></title><description><![CDATA[<p>Hallo Zusammen,</p>
<p>habe eine Frage bzgl. Vererbung in C++: Wenn man eine Methode in der Oberklasse deklariert in der Headerdatei, dann braucht man diese doch nicht nochmal in der headerdatei der Unterklasse zu deklarieren oder? Und falls Sie in der Oberklasse mit virtual deklariert wurde dann kann man Sie doch in den Unterklassen verschieden definieren, oder? Vllt. klingt die Frage komisch aber...</p>
<p>Danke im Voraus,</p>
<p>Jenny</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304649</guid><dc:creator><![CDATA[jenny.caros]]></dc:creator><pubDate>Wed, 06 Mar 2013 09:20:22 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden in Vererbung on Wed, 06 Mar 2013 09:22:36 GMT]]></title><description><![CDATA[<p>Nicht virtuelle Methoden einer Superklasse sind in der Unterklasse sichtbar(Sichtbarkeitsspezifizierer muss natürlich passen, also kein private) und werden auch übernommen, da muss man nichts neuschreiben.</p>
<p>Virtuelle Methoden sind auch in den Unterklassen sichtbar, müssen aber im Falle des Überschreibens auch neu deklariert werden. Du kannst ja sogar den Typ leicht abändern (da gibt es spezielle Regeln)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304651</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 06 Mar 2013 09:22:36 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden in Vererbung on Wed, 06 Mar 2013 09:25:35 GMT]]></title><description><![CDATA[<p>Aber man muss man denn dieselben Methoden in den Headerdateien der Unterklassen neu deklarieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304655</guid><dc:creator><![CDATA[jenny.caros]]></dc:creator><pubDate>Wed, 06 Mar 2013 09:25:35 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden in Vererbung on Wed, 06 Mar 2013 09:32:03 GMT]]></title><description><![CDATA[<p>jenny.caros schrieb:</p>
<blockquote>
<p>Aber man muss man denn dieselben Methoden in den Headerdateien der Unterklassen neu deklarieren?</p>
</blockquote>
<p>Es ist nicht ganz klar, was du meinst... ich glaube, die Antwort auf deine Frage ist nein, aber weil die Frage nicht so klar ist....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304658</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 06 Mar 2013 09:32:03 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden in Vererbung on Wed, 06 Mar 2013 09:35:52 GMT]]></title><description><![CDATA[<p>Also ich denke Skym0sh0 hat es schon gesagt: das heisst also wenn die Methode in der Oberklasse als virtual deklariert ist, dann muss Sie, wenn sie in der Unterklasse überschrieben werden soll neu deklariert werden, ansonsten nicht?...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304660</guid><dc:creator><![CDATA[jenny.caros]]></dc:creator><pubDate>Wed, 06 Mar 2013 09:35:52 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden in Vererbung on Wed, 06 Mar 2013 09:38:36 GMT]]></title><description><![CDATA[<p>Wenn du die Methode überschreiben willst, musst du sie in der Unterklasse deklarieren. Ob virtual oder nicht, ist egal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304662</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 06 Mar 2013 09:38:36 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden in Vererbung on Wed, 06 Mar 2013 09:40:49 GMT]]></title><description><![CDATA[<p>Eigentlich ganz einfach:<br />
Wenn Du eine Methode in einer Klasse definieren willst, musst Du sie dort auch deklarieren!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304663</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Wed, 06 Mar 2013 09:40:49 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden in Vererbung on Wed, 06 Mar 2013 09:41:31 GMT]]></title><description><![CDATA[<p>Ok. Und wenn ich sie nicht überschreiben will dann brauch ich nicht nochmal deklarieren? Egal ob virtual in der Oberklasse oder nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304664</guid><dc:creator><![CDATA[jenny.caros]]></dc:creator><pubDate>Wed, 06 Mar 2013 09:41:31 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden in Vererbung on Wed, 06 Mar 2013 09:48:33 GMT]]></title><description><![CDATA[<p>jenny.caros schrieb:</p>
<blockquote>
<p>Ok. Und wenn ich sie nicht überschreiben will dann brauch ich nicht nochmal deklarieren?</p>
</blockquote>
<p>Nein. Wieso auch? Ist doch schon in der Basisklasse deklariert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304668</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 06 Mar 2013 09:48:33 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden in Vererbung on Wed, 06 Mar 2013 10:17:53 GMT]]></title><description><![CDATA[<p>Ein Spezialfall liegt vor, wenn Du eine überladene Methode überschreibst, das würde dann ohne weitere Massnahmen alle anderen Überladungen verbergen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304677</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Wed, 06 Mar 2013 10:17:53 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden in Vererbung on Wed, 06 Mar 2013 10:27:59 GMT]]></title><description><![CDATA[<p>Also ich finde, dass OP den Terminus richtig nutzt.</p>
<blockquote>
<p>Wenn man eine Methode in der Oberklasse deklariert in der Headerdatei, dann braucht man diese doch nicht nochmal in der headerdatei der Unterklasse zu deklarieren oder?</p>
</blockquote>
<p>Nur, wenn Überschreiben gewünscht ist.</p>
<blockquote>
<p>Und falls Sie in der Oberklasse mit virtual deklariert wurde dann kann man Sie doch in den Unterklassen verschieden definieren, oder?</p>
</blockquote>
<p>Wenn Du mit definieren implementieren meinst: Ja, dennoch ist Deklaration in der Unterklasse notwendig. Du kannst hingegen nicht den Rückgabetyp/Parametertypen ändern. Das wäre dann eben eine Funktionsüberladung, s. auch belli.</p>
<pre><code class="language-cpp">class Oberklasse
{
public:
    void foo() {/* ... */}
    virtual void bar() {/* ... */}
};

class Unterklasse1 : public Oberklasse
{
};
// Unterklasse1-Instanz enthält nun aufrufbare Methoden foo und bar

void Unterklasse1::foo()
{
    // Nein, so nicht! Deklaration notwendig, aber wäre wegen fehlendem virtual eh widersinnig
}

void Unterklasse1::bar()
{
    // auch das geht nicht, Deklaration in Unterklasse1 fehlt
}

class Unterklasse2 : public Oberklasse
{
public:
    void foo(); // eigentlich unsinnig; Überschreiben geht ja nicht, aber syntaktisch ist Deklaration ok
    virtual void bar(); // notwendig, wenn bar überschrieben werden soll
};

void Unterklasse2::bar()
{
    // Dafür ist Deklaration wie oben notwendig, ist jetzt also in Ordnung
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2304678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304678</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Wed, 06 Mar 2013 10:27:59 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden in Vererbung on Wed, 06 Mar 2013 10:49:07 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Du kannst hingegen nicht den Rückgabetyp/Parametertypen ändern. Das wäre dann eben eine Funktionsüberladung, s. auch belli.</p>
</blockquote>
<p>Doch, das geht eben schon <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>Bsp:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;ctime&gt;

class Base
{
	int x;
};

class Derive : public Base
{
	int y;
};

// -----------------------------------------------------------------------

class FooBase
{
protected:
	Base * m_inst;

public:
	FooBase()
		: m_inst(new Base)
	{	}

	virtual Base&amp; getInst(Base &amp; b)
	{
		return *this-&gt;m_inst;
	}
};

class FooDerive : public FooBase
{
public:
	FooDerive()
	{
		this-&gt;m_inst = new Derive;
	}

	virtual Derive&amp; getInst(Derive&amp; de)
	{
		Base * b = this-&gt;m_inst;
		Derive * d = static_cast&lt;Derive*&gt;(b);
		return *d;
	}
};

int main()
{
	srand(time(0));
	Base * pb = rand()%2 ? new Base : new Derive;

	FooBase * pfb = rand()%2 ? new FooBase : new FooDerive;

	Base &amp; b = pfb-&gt;getInst(*pb);
	Derive &amp; d = static_cast&lt;Derive&amp;&gt;(pfb-&gt;getInst(*pb));

	return 0;
}
</code></pre>
<p>(Es geht nur um das Ändern der Methodenköpfe und nicht um das Speichermangement!)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304689</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 06 Mar 2013 10:49:07 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden in Vererbung on Wed, 06 Mar 2013 11:18:11 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Eisflamme schrieb:</p>
<blockquote>
<p>Du kannst hingegen nicht den Rückgabetyp/Parametertypen ändern. Das wäre dann eben eine Funktionsüberladung, s. auch belli.</p>
</blockquote>
<p>Doch, das geht eben schon <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>
</blockquote>
<p>was dann eine Funktionsüberladung ist. pb ist ein Pointer auf Base und somit wird immer FooBase::getInst aufgerufen (welche nicht in FooDerived überschrieben, sondern nur überladen ist).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304697</guid><dc:creator><![CDATA[arez0]]></dc:creator><pubDate>Wed, 06 Mar 2013 11:18:11 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden in Vererbung on Wed, 06 Mar 2013 11:40:56 GMT]]></title><description><![CDATA[<p>Oh Shit, du hast Recht. Da hab ich mich vertan, weil das in Java irgendwie geht (irgendwie, ich habs nicht im Kopf)</p>
<p>My Bad</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304708</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 06 Mar 2013 11:40:56 GMT</pubDate></item></channel></rss>