<?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[stack aus abgeleiteten klassen]]></title><description><![CDATA[<p>Hi</p>
<p>ich wollte ein stack aus abgeleiteten klassen machen,<br />
dazu gibt es eine basisklasse, von der man klassen ableitet und diese im stack zusammenfasst,</p>
<p>so:<br />
stack.items[0].Render()<br />
wobei items[0] eine abgeleitete klasse von item ist und nich item selbst..</p>
<p>ich hab eine Basisklasse</p>
<pre><code class="language-cpp">class item {
public:
    virtual void Render() = 0;
};
</code></pre>
<p>dann der stack:</p>
<pre><code class="language-cpp">#define MAXSTACK 2
class Cmenustack {
public:
    Cmenustack();
    int count;
    item *items[MAXSTACK];
    void Push(item *menu);
    void Pop();
    item *GetTopItem();
};

Cmenustack::Cmenustack() { 
    this-&gt;count = 0; 
    for(int i=0;i&lt;MAXSTACK;i++) 
        this-&gt;items[i] = NULL;
}

void Cmenustack::Push(item *menu) {
    this-&gt;items[this-&gt;count] = menu;
    this-&gt;count++;
}
void Cmenustack::Pop() {
    this-&gt;count--;
    for(int i=0;i&lt;this-&gt;count;i++)
        this-&gt;items[i] = this-&gt;items[i+1];
    this-&gt;items[this-&gt;count] = NULL;
}

item *Cmenustack::GetTopMenu() {
    return this-&gt;items[0];
}
</code></pre>
<p>dann ein abgeleitetes element:</p>
<pre><code class="language-cpp">class CMainMenu : public item {
public:
    virtual void Render();
};
void CMainMenu::Render() { printf(&quot;Hello World from MainMenu::Render()!!\n&quot;); }

//und das HP:

int main(int argc, char *argv[]) {
    CMainMenu mainmenu;
    Cmenustack st;
    st.Push((CMainMenu*)&amp;mainmenu);
    st.items[0].Render();
//hier fehler -&gt; Render wurde nicht deklariert..
    st.Pop();
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/159559/stack-aus-abgeleiteten-klassen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 10 Sep 2026 15:14:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/159559.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 16 Sep 2006 14:55:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to stack aus abgeleiteten klassen on Sat, 16 Sep 2006 14:57:36 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>ich wollte ein stack aus abgeleiteten klassen machen,<br />
dazu gibt es eine basisklasse, von der man klassen ableitet und diese im stack zusammenfasst,</p>
<p>so:<br />
stack.items[0].Render()<br />
wobei items[0] eine abgeleitete klasse von item ist und nich item selbst..</p>
<p>ich hab eine Basisklasse</p>
<pre><code class="language-cpp">class item {
public:
    virtual void Render() = 0;
};
</code></pre>
<p>dann der stack:</p>
<pre><code class="language-cpp">#define MAXSTACK 2
class Cmenustack {
public:
    Cmenustack();
    int count;
    item *items[MAXSTACK];
    void Push(item *menu);
    void Pop();
    item *GetTopItem();
};

Cmenustack::Cmenustack() { 
    this-&gt;count = 0; 
    for(int i=0;i&lt;MAXSTACK;i++) 
        this-&gt;items[i] = NULL;
}

void Cmenustack::Push(item *menu) {
    this-&gt;items[this-&gt;count] = menu;
    this-&gt;count++;
}
void Cmenustack::Pop() {
    this-&gt;count--;
    for(int i=0;i&lt;this-&gt;count;i++)
        this-&gt;items[i] = this-&gt;items[i+1];
    this-&gt;items[this-&gt;count] = NULL;
}

item *Cmenustack::GetTopMenu() {
    return this-&gt;items[0];
}
</code></pre>
<p>dann ein abgeleitetes element:</p>
<pre><code class="language-cpp">class CMainMenu : public item {
public:
    virtual void Render();
};
void CMainMenu::Render() { printf(&quot;Hello World from MainMenu::Render()!!\n&quot;); }

//und das HP:

int main(int argc, char *argv[]) {
    CMainMenu mainmenu;
    Cmenustack st;
    st.Push((CMainMenu*)&amp;mainmenu);
    st.items[0].Render();
//hier fehler -&gt; Render wurde nicht deklariert..
    st.Pop();
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1138559</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1138559</guid><dc:creator><![CDATA[_carnage]]></dc:creator><pubDate>Sat, 16 Sep 2006 14:57:36 GMT</pubDate></item><item><title><![CDATA[Reply to stack aus abgeleiteten klassen on Sat, 16 Sep 2006 15:15:56 GMT]]></title><description><![CDATA[<p>Klappt doch:</p>
<pre><code class="language-cpp">class Item
{
public:
	virtual void Render() const = 0;
};

class MainMenu : public Item
{
public:
	virtual void Render() const;
};

void MainMenu::Render() const
{
	std::cout &lt;&lt; &quot;Hello World from MainMenu::Render()!!\n&quot;;
}

class MenuStack
{
	enum { MAX_STACK = 2 };

private:
	int		count;
	Item	*items[ MAX_STACK ];

public:
	MenuStack();

	void Push( Item *item );
	Item *Pop();
	Item *Top() const;
};

MenuStack::MenuStack()
: count ( 0 )
{}

void MenuStack::Push( Item *item )
{
	assert( count &lt; MAX_STACK &amp;&amp; &quot;Stack is full&quot; );
	items[ count++ ] = item;
}

Item *MenuStack::Pop()
{
	assert( count &gt; 0 &amp;&amp; &quot;Stack is empty&quot; );
	return items[ --count ];
}

Item *MenuStack::Top() const
{
	assert( count &gt; 0 &amp;&amp; &quot;Stack is empty&quot; );
	return items[ count-1 ];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1138576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1138576</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Sat, 16 Sep 2006 15:15:56 GMT</pubDate></item><item><title><![CDATA[Reply to stack aus abgeleiteten klassen on Sat, 16 Sep 2006 15:44:37 GMT]]></title><description><![CDATA[<p>danke aber habs versucht:</p>
<pre><code class="language-cpp">int main(int argc, char *argv[]) {
    MainMenu mainmenu;
    MenuStack st;
    st.Push(&amp;mainmenu);
    st.Top().Render();
    st.Pop();
return 0;
}
</code></pre>
<p>sagt schon wieder: &quot;Render wurde nicht deklariert&quot; in main()</p>
<p>aber wenn ich jetzt kein array von items hab sondern nur ein *item<br />
dann funktionierts!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1138596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1138596</guid><dc:creator><![CDATA[_carnage]]></dc:creator><pubDate>Sat, 16 Sep 2006 15:44:37 GMT</pubDate></item><item><title><![CDATA[Reply to stack aus abgeleiteten klassen on Sat, 16 Sep 2006 15:51:16 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int main(int argc, char *argv[]) 
{
    MainMenu mainmenu;
    MenuStack st;
    st.Push(&amp;mainmenu);
    st.Top().Render(); /* Das ganze ist doch ein Pointer also müsste es wohl st.Top()-&gt;Render(); heißen!? */
    st.Pop();
    return 0;
}
</code></pre>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1138599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1138599</guid><dc:creator><![CDATA[Dummie]]></dc:creator><pubDate>Sat, 16 Sep 2006 15:51:16 GMT</pubDate></item><item><title><![CDATA[Reply to stack aus abgeleiteten klassen on Sat, 16 Sep 2006 15:52:50 GMT]]></title><description><![CDATA[<p>Dummie schrieb:</p>
<blockquote>
<pre><code class="language-cpp">st.Top().Render(); /* Das ganze ist doch ein Pointer also müsste es wohl
</code></pre>
</blockquote>
<p>So isses!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1138601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1138601</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Sat, 16 Sep 2006 15:52:50 GMT</pubDate></item><item><title><![CDATA[Reply to stack aus abgeleiteten klassen on Sat, 16 Sep 2006 16:01:28 GMT]]></title><description><![CDATA[<p>ähm oke den Wald vor lauter Bäumen nich gesehen, danke Leute!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1138606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1138606</guid><dc:creator><![CDATA[_carnage]]></dc:creator><pubDate>Sat, 16 Sep 2006 16:01:28 GMT</pubDate></item><item><title><![CDATA[Reply to stack aus abgeleiteten klassen on Sat, 16 Sep 2006 16:31:42 GMT]]></title><description><![CDATA[<p>Du siehst den Baum immernoch nicht, denn der ist std::stack</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1138628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1138628</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Sat, 16 Sep 2006 16:31:42 GMT</pubDate></item></channel></rss>