<?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[Vererbung verschieden Klassen mit einer Basisklasse]]></title><description><![CDATA[<p>Hallo,</p>
<p>Also folgendes, ich hab eine Basis Klasse GameState:</p>
<pre><code>#pragma once
#include &lt;SFML\Graphics.hpp&gt;

class GameStateManager;

class GameState
{
public:
	GameState();
	~GameState();

	virtual void Init();
	virtual void Update(sf::RenderWindow &amp;window, GameStateManager &amp;game);
	virtual void Render(sf::RenderWindow &amp;window, GameStateManager &amp;game);
	virtual void Cleanup();

	friend bool operator==(GameState const&amp; left, GameState const&amp; right) { return false; };
	friend bool operator==(GameState const&amp; left, int const&amp; ID) {
		if (left.ID == ID)
			return true;

		return false;
	};

protected:
	int ID;
};
</code></pre>
<p>Dann hab ich noch mehrere Klassen die von dieser Klasse erben und in einer Klasse GameStateManager möchte ich Objekte dieser Klassen die ja alle die gleich Basis Klasse haben in einer Liste speichern.<br />
Das klappt auch eigentlich aber wenn ich eine der funktionen der Basisklasse aufrufe wird nie die überschriebene Funktion in der erbenden Klasse aufgerufen sondern nur die der Basisklasse.<br />
Kann mir jemand sagen was ich machen muss damit die überschriebene Funktion aufgerufen wird?</p>
<p>LogoState:</p>
<pre><code>#pragma once
#include &quot;GameState.h&quot;

class LogoState :
	public GameState
{
public:
	LogoState();
	~LogoState();

	void Init() override;
	void Update(sf::RenderWindow &amp;window, GameStateManager &amp;game) override;
	void Render(sf::RenderWindow &amp;window, GameStateManager &amp;game) override;
	void Cleanup() override;

};
</code></pre>
<p>GameStateManager:</p>
<pre><code>#pragma once

#include &lt;list&gt;
#include &lt;algorithm&gt;
#include &lt;SFML\Graphics.hpp&gt;

#include &quot;GameState.h&quot;

class GameStateManager
{
public:
	GameStateManager(sf::RenderWindow &amp;window);
	~GameStateManager();

	void Init();
	void Update(sf::RenderWindow &amp;window);
	void Render(sf::RenderWindow &amp;window);
	void Cleanup();

	void AddState(GameState state);
	void RemoveState(int ID);
	void EnterState(int ID);
	void Start();

private:
	std::list&lt;GameState&gt; gameStates;
	sf::RenderWindow &amp;window;
	GameState currentState;
};
</code></pre>
<p>Gruß Erik</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/324233/vererbung-verschieden-klassen-mit-einer-basisklasse</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Jul 2026 20:26:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/324233.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 08 Mar 2014 00:46:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vererbung verschieden Klassen mit einer Basisklasse on Sat, 08 Mar 2014 00:47:35 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Also folgendes, ich hab eine Basis Klasse GameState:</p>
<pre><code>#pragma once
#include &lt;SFML\Graphics.hpp&gt;

class GameStateManager;

class GameState
{
public:
	GameState();
	~GameState();

	virtual void Init();
	virtual void Update(sf::RenderWindow &amp;window, GameStateManager &amp;game);
	virtual void Render(sf::RenderWindow &amp;window, GameStateManager &amp;game);
	virtual void Cleanup();

	friend bool operator==(GameState const&amp; left, GameState const&amp; right) { return false; };
	friend bool operator==(GameState const&amp; left, int const&amp; ID) {
		if (left.ID == ID)
			return true;

		return false;
	};

protected:
	int ID;
};
</code></pre>
<p>Dann hab ich noch mehrere Klassen die von dieser Klasse erben und in einer Klasse GameStateManager möchte ich Objekte dieser Klassen die ja alle die gleich Basis Klasse haben in einer Liste speichern.<br />
Das klappt auch eigentlich aber wenn ich eine der funktionen der Basisklasse aufrufe wird nie die überschriebene Funktion in der erbenden Klasse aufgerufen sondern nur die der Basisklasse.<br />
Kann mir jemand sagen was ich machen muss damit die überschriebene Funktion aufgerufen wird?</p>
<p>LogoState:</p>
<pre><code>#pragma once
#include &quot;GameState.h&quot;

class LogoState :
	public GameState
{
public:
	LogoState();
	~LogoState();

	void Init() override;
	void Update(sf::RenderWindow &amp;window, GameStateManager &amp;game) override;
	void Render(sf::RenderWindow &amp;window, GameStateManager &amp;game) override;
	void Cleanup() override;

};
</code></pre>
<p>GameStateManager:</p>
<pre><code>#pragma once

#include &lt;list&gt;
#include &lt;algorithm&gt;
#include &lt;SFML\Graphics.hpp&gt;

#include &quot;GameState.h&quot;

class GameStateManager
{
public:
	GameStateManager(sf::RenderWindow &amp;window);
	~GameStateManager();

	void Init();
	void Update(sf::RenderWindow &amp;window);
	void Render(sf::RenderWindow &amp;window);
	void Cleanup();

	void AddState(GameState state);
	void RemoveState(int ID);
	void EnterState(int ID);
	void Start();

private:
	std::list&lt;GameState&gt; gameStates;
	sf::RenderWindow &amp;window;
	GameState currentState;
};
</code></pre>
<p>Gruß Erik</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2387575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2387575</guid><dc:creator><![CDATA[darman96]]></dc:creator><pubDate>Sat, 08 Mar 2014 00:47:35 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung verschieden Klassen mit einer Basisklasse on Sat, 08 Mar 2014 06:34:06 GMT]]></title><description><![CDATA[<p>Stichwort: slicing.<br />
In kurz: Wenn du ein polymorphes Objekt by-value an etwas übergibst, wird bei der Kopie der abgeleitete Teil weggelassen, so dass das Objekt danach ein Objekt dann vom Typ der Basisklasse ist, nicht mehr der abgeleiteten<br />
Lösung: Polymorphe Objekte in Pointern im Container speichern (wieso eig. list?) und by value übergeben. Zusätzlich copy und move verbieten/Basisklasse abstrackt machen, dann meckert der Compiler sobald so etwas vorkommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2387584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2387584</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sat, 08 Mar 2014 06:34:06 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung verschieden Klassen mit einer Basisklasse on Sat, 08 Mar 2014 13:20:23 GMT]]></title><description><![CDATA[<p>Okay danke für die Antwort.<br />
Zuerst, was spricht denn gegen list?</p>
<p>Dann, wie meinst du das mit copy und move verbieten und die Basisklasse abstrakt machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2387630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2387630</guid><dc:creator><![CDATA[darman96]]></dc:creator><pubDate>Sat, 08 Mar 2014 13:20:23 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung verschieden Klassen mit einer Basisklasse on Sat, 08 Mar 2014 14:02:37 GMT]]></title><description><![CDATA[<p>List ist relativ langsam im Gegensatz zu z.B. vector. Die Frage sollte dabei eher lauten, was spricht gegen vector.</p>
<p>Wenn dein Compiler C++11 unterstützt kannst du das hier machen:</p>
<pre><code>class GameState
{
public:
    GameState();
    virtual ~GameState(); //muss auf jedenfall hier hin, wenn du Vererbung/Polymorphie nutzt

	GameState(GameState const&amp;) = delete;
	GameState&amp; operator=(GameState) = delete;

	GameState(GameState&amp;&amp;)= delete;
	GameState&amp; operator=(GameState&amp;&amp;) = delete;
};
</code></pre>
<p>Ansonsten:</p>
<pre><code>class GameState
{
public:
    GameState();
    virtual ~GameState(); //muss auf jedenfall hier hin, wenn du Vererbung/Polymorphie nutzt

private:
	GameState(GameState const&amp;);
	GameState&amp; operator=(GameState);

	GameState(GameState&amp;&amp;);
	GameState&amp; operator=(GameState&amp;&amp;);
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2387637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2387637</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sat, 08 Mar 2014 14:02:37 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung verschieden Klassen mit einer Basisklasse on Sat, 08 Mar 2014 14:37:33 GMT]]></title><description><![CDATA[<blockquote>
<pre><code>GameState(GameState&amp;&amp;)= delete;
    GameState&amp; operator=(GameState&amp;&amp;) = delete;
</code></pre>
</blockquote>
<p>Ist nicht nötig. Im zweiten Beispiel genausowenig.</p>
<p>§12.8 Abschnitt 9 und 20 schrieb:</p>
<blockquote>
<p>If the definition of a class X does not explicitly declare a move constructor, one will be implicitly declared as defaulted if and only if<br />
— X does not have a user-declared copy constructor<br />
[..]<br />
If the definition of a class X does not explicitly declare a move assignment operator, one will be implicitly declared as defaulted if and only if<br />
— X does not have a user-declared copy constructor</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2387641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2387641</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 08 Mar 2014 14:37:33 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung verschieden Klassen mit einer Basisklasse on Sat, 08 Mar 2014 15:16:57 GMT]]></title><description><![CDATA[<p>SFML bietet auch die Klasse sf::NonCopyable: <a href="http://www.sfml-dev.org/documentation/2.1/classsf_1_1NonCopyable.php" rel="nofollow">http://www.sfml-dev.org/documentation/2.1/classsf_1_1NonCopyable.php</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2387650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2387650</guid><dc:creator><![CDATA[patrick246]]></dc:creator><pubDate>Sat, 08 Mar 2014 15:16:57 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung verschieden Klassen mit einer Basisklasse on Sat, 08 Mar 2014 15:35:55 GMT]]></title><description><![CDATA[<p>Aber wenn ich vector benutze muss ich doch im vorraus die größe festlegen, ich weiß aber ja nicht wie viele GameStates ich brauchen werde deswegen hatte ich mich für die List entschieden.</p>
<p>okay also reicht es wenn ich von sf::NonCopyable erbe und im vector / in der liste nen pointer speicher?</p>
<p>Edit:<br />
Aber warum sollte die Klasse NonCopyable sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2387653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2387653</guid><dc:creator><![CDATA[darman96]]></dc:creator><pubDate>Sat, 08 Mar 2014 15:35:55 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung verschieden Klassen mit einer Basisklasse on Sat, 08 Mar 2014 15:32:26 GMT]]></title><description><![CDATA[<blockquote>
<p>Aber wenn ich vector benutze muss ich doch im v****** die größe festlegen</p>
</blockquote>
<p>Nein, musst du nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2387654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2387654</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 08 Mar 2014 15:32:26 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung verschieden Klassen mit einer Basisklasse on Sat, 08 Mar 2014 15:37:04 GMT]]></title><description><![CDATA[<p>0_o warum ist &quot;vorraus&quot; mit * ersetzt worden?</p>
<p>okay dann nehm ich vector</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2387655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2387655</guid><dc:creator><![CDATA[darman96]]></dc:creator><pubDate>Sat, 08 Mar 2014 15:37:04 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung verschieden Klassen mit einer Basisklasse on Sat, 08 Mar 2014 15:38:18 GMT]]></title><description><![CDATA[<p>darman96 schrieb:</p>
<blockquote>
<p>0_o warum ist &quot;v******&quot; mit * ersetzt worden?</p>
</blockquote>
<p>Weil du &quot;Voraus&quot; falsch geschrieben hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2387656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2387656</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 08 Mar 2014 15:38:18 GMT</pubDate></item></channel></rss>