<?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[stl problem versch. klassen in einem container]]></title><description><![CDATA[<p>so hab da n (kleines) problem ;P</p>
<p>Zur Frage:</p>
<p>In einem Conatiner sollen Objekte von verschiedenen Klassen(eine haupt und eine unterklasse die erbt) gespeichert werden.</p>
<p>Wie kann man es realisieren das beim eintragen von einer Kaffeemaschine (siehe main.cpp) die Klasse Kaffeemaschine bei der funktion GeraetEintragen() benutzt wird und nicht AllgemeinesGeraet.</p>
<p>Weiteres Problem besteht darin wie man dann in GeraetEintragen das Attribut iAnzahlTassen verwendet.</p>
<p>fragen über fragen<br />
gruesse quibb</p>
<pre><code class="language-cpp">#include &quot;Geraete.h&quot;
#include &lt;iostream&gt;
using namespace std;

int main(void) {

AllgemeinesGeraet test;

Kaffeemaschine geraet1(&quot;bla&quot;, 1);

test.GeraetEintragen(geraet1);

cout &lt;&lt; test;

return 0;
}
</code></pre>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
using namespace std;

class AllgemeinesGeraet {

vector&lt;AllgemeinesGeraet&gt; Geraet;

private:

string sGeraetBezeichnung;

public:

AllgemeinesGeraet();
AllgemeinesGeraet(string sBezeichnung);

void GeraetEintragen(AllgemeinesGeraet &amp;b) { // &lt;-PROBLEM

Geraet.push_back(b);
}

friend ostream&amp; operator&lt;&lt;(ostream&amp; os, AllgemeinesGeraet &amp;test) {

vector&lt;AllgemeinesGeraet&gt;::iterator pos;

for (pos = test.Geraet.begin(); pos &lt; test.Geraet.end(); ++pos)
{
os &lt;&lt; *pos &lt;&lt; endl;
}

os &lt;&lt; &quot;Bezeichnung: &quot; &lt;&lt; test.sGeraetBezeichnung;
return os;
}
};

class Kaffeemaschine : public AllgemeinesGeraet {

private:

int iAnzahlTassen;

public:

Kaffeemaschine(string sBezeichnung, int iTassen);
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/134811/stl-problem-versch-klassen-in-einem-container</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 17:37:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/134811.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 28 Jan 2006 20:35:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to stl problem versch. klassen in einem container on Sat, 28 Jan 2006 20:35:19 GMT]]></title><description><![CDATA[<p>so hab da n (kleines) problem ;P</p>
<p>Zur Frage:</p>
<p>In einem Conatiner sollen Objekte von verschiedenen Klassen(eine haupt und eine unterklasse die erbt) gespeichert werden.</p>
<p>Wie kann man es realisieren das beim eintragen von einer Kaffeemaschine (siehe main.cpp) die Klasse Kaffeemaschine bei der funktion GeraetEintragen() benutzt wird und nicht AllgemeinesGeraet.</p>
<p>Weiteres Problem besteht darin wie man dann in GeraetEintragen das Attribut iAnzahlTassen verwendet.</p>
<p>fragen über fragen<br />
gruesse quibb</p>
<pre><code class="language-cpp">#include &quot;Geraete.h&quot;
#include &lt;iostream&gt;
using namespace std;

int main(void) {

AllgemeinesGeraet test;

Kaffeemaschine geraet1(&quot;bla&quot;, 1);

test.GeraetEintragen(geraet1);

cout &lt;&lt; test;

return 0;
}
</code></pre>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
using namespace std;

class AllgemeinesGeraet {

vector&lt;AllgemeinesGeraet&gt; Geraet;

private:

string sGeraetBezeichnung;

public:

AllgemeinesGeraet();
AllgemeinesGeraet(string sBezeichnung);

void GeraetEintragen(AllgemeinesGeraet &amp;b) { // &lt;-PROBLEM

Geraet.push_back(b);
}

friend ostream&amp; operator&lt;&lt;(ostream&amp; os, AllgemeinesGeraet &amp;test) {

vector&lt;AllgemeinesGeraet&gt;::iterator pos;

for (pos = test.Geraet.begin(); pos &lt; test.Geraet.end(); ++pos)
{
os &lt;&lt; *pos &lt;&lt; endl;
}

os &lt;&lt; &quot;Bezeichnung: &quot; &lt;&lt; test.sGeraetBezeichnung;
return os;
}
};

class Kaffeemaschine : public AllgemeinesGeraet {

private:

int iAnzahlTassen;

public:

Kaffeemaschine(string sBezeichnung, int iTassen);
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/979278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/979278</guid><dc:creator><![CDATA[quibb]]></dc:creator><pubDate>Sat, 28 Jan 2006 20:35:19 GMT</pubDate></item><item><title><![CDATA[Reply to stl problem versch. klassen in einem container on Sat, 28 Jan 2006 20:41:52 GMT]]></title><description><![CDATA[<p>Pointer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/979281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/979281</guid><dc:creator><![CDATA[Polymorphie]]></dc:creator><pubDate>Sat, 28 Jan 2006 20:41:52 GMT</pubDate></item><item><title><![CDATA[Reply to stl problem versch. klassen in einem container on Sat, 28 Jan 2006 20:49:34 GMT]]></title><description><![CDATA[<p>also?</p>
<pre><code class="language-cpp">#include &quot;Geraete.h&quot;
#include &lt;iostream&gt;
using namespace std;

int main(void) {

	AllgemeinesGeraet test;

	Kaffeemaschine geraet1(&quot;bla&quot;, 1);
	Kaffeemaschine *p_geraet1 = &amp;geraet1;

	test.GeraetEintragen(*p_geraet1);

	cout &lt;&lt; test;

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/979286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/979286</guid><dc:creator><![CDATA[quibb]]></dc:creator><pubDate>Sat, 28 Jan 2006 20:49:34 GMT</pubDate></item><item><title><![CDATA[Reply to stl problem versch. klassen in einem container on Sat, 28 Jan 2006 20:50:37 GMT]]></title><description><![CDATA[<p>Pointer im Container</p>
]]></description><link>https://www.c-plusplus.net/forum/post/979289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/979289</guid><dc:creator><![CDATA[Polymorphie]]></dc:creator><pubDate>Sat, 28 Jan 2006 20:50:37 GMT</pubDate></item><item><title><![CDATA[Reply to stl problem versch. klassen in einem container on Sat, 28 Jan 2006 21:39:19 GMT]]></title><description><![CDATA[<p>Du musst anstatt von:</p>
<pre><code class="language-cpp">vector&lt;AllgemeinesGeraet&gt; Geraet;
</code></pre>
<p>das schreiben:</p>
<pre><code class="language-cpp">vector&lt;AllgemeinesGeraet*&gt; Geraet;
</code></pre>
<p>Außerdem Anstatt von einer Referenz ebenfalls Zeiger übergeben. Dann sollte der Container in der Lage sein alle abgeleiteten Klassen von &quot;AllgemeinesGeraet&quot; zu speichern</p>
]]></description><link>https://www.c-plusplus.net/forum/post/979322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/979322</guid><dc:creator><![CDATA[SALOMON]]></dc:creator><pubDate>Sat, 28 Jan 2006 21:39:19 GMT</pubDate></item><item><title><![CDATA[Reply to stl problem versch. klassen in einem container on Sat, 28 Jan 2006 21:40:46 GMT]]></title><description><![CDATA[<p>erstmal vielen dank für den tip.<br />
hab jetzt einen pointer im container aber der sinn will sich mir immer noch nicht erschließen. Der Typ is doch trotzdem noch AllgemeinesGeraet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
using namespace std;

class AllgemeinesGeraet {

	vector&lt;AllgemeinesGeraet*&gt; Geraet;	

	private:

		string sGeraetBezeichnung;

	public:

		AllgemeinesGeraet();
		AllgemeinesGeraet(string sBezeichnung);

		void GeraetEintragen(AllgemeinesGeraet *b) {

			b-&gt;Geraet.push_back(this);			
		}		

		friend ostream&amp; operator&lt;&lt;(ostream&amp; os, AllgemeinesGeraet *b){				

			os &lt;&lt; b-&gt;sGeraetBezeichnung;						

			return os;
		}

		void ausgabe() {

			vector&lt;AllgemeinesGeraet*&gt;::iterator pos;
			for (pos = Geraet.begin(); pos &lt; Geraet.end(); ++pos)
			{								
				cout &lt;&lt; *pos &lt;&lt; endl;				
			}
		}	
};

class Kaffeemaschine : public AllgemeinesGeraet {

	private:

		int iAnzahlTassen;

	public:

		Kaffeemaschine(string sBezeichnung, int iTassen);
};
</code></pre>
<pre><code class="language-cpp">int main(void) {

	AllgemeinesGeraet TestGeraet;
	AllgemeinesGeraet *p_TestGeraet = &amp;TestGeraet;

	Kaffeemaschine geraet1(&quot;bla&quot;, 1);
	Kaffeemaschine *p_geraet1 = &amp;geraet1;

      p_geraet1-&gt;GeraetEintragen(p_TestGeraet);

      p_TestGeraet-&gt;ausgabe();

	return 0;
}
</code></pre>
<p>gruss quibb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/979324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/979324</guid><dc:creator><![CDATA[quibb]]></dc:creator><pubDate>Sat, 28 Jan 2006 21:40:46 GMT</pubDate></item><item><title><![CDATA[Reply to stl problem versch. klassen in einem container on Sat, 28 Jan 2006 21:46:07 GMT]]></title><description><![CDATA[<p>Falls du in dem Container eine normale Klasse (nicht als Zeiger) speicherst, dann erwartet der container diese Klasse am Ende auch.<br />
Wenn du stattdessen einen Zeiger verwendest, wird in dem Container nur die Adresse von dem Objekt im Speicher gespeichert und nicht das Objekt selbst.<br />
Das ermöglicht die auch abgeleitete Klassen innerhalb deines Containers zu speichern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/979333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/979333</guid><dc:creator><![CDATA[SALOMON]]></dc:creator><pubDate>Sat, 28 Jan 2006 21:46:07 GMT</pubDate></item><item><title><![CDATA[Reply to stl problem versch. klassen in einem container on Sat, 28 Jan 2006 21:55:09 GMT]]></title><description><![CDATA[<p>quibb schrieb:</p>
<blockquote>
<p>erstmal vielen dank für den tip.<br />
hab jetzt einen pointer im container aber der sinn will sich mir immer noch nicht erschließen. Der Typ is doch trotzdem noch AllgemeinesGeraet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Da hast du recht. Sinn macht das erst wenn Polymorphie ins Spiel kommt. Wenn du über einen pointer auf die Basisklasse eine virtuelle Methode aufrufst dann wird zur Laufzeit die richtige aufgerufen.</p>
<p>Übrigens erzeugst du die Objekte besser dynamisch mit new.<br />
etwa so</p>
<pre><code class="language-cpp">int main(void) {

    AllgemeinesGeraet *p_TestGeraet = new Kaffeemaschine(&quot;bla&quot;, 1);

    p_geraet1-&gt;GeraetEintragen(p_TestGeraet);

    p_TestGeraet-&gt;ausgabe();

	return 0;
}
</code></pre>
<p>Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/979338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/979338</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Sat, 28 Jan 2006 21:55:09 GMT</pubDate></item><item><title><![CDATA[Reply to stl problem versch. klassen in einem container on Sat, 28 Jan 2006 21:56:18 GMT]]></title><description><![CDATA[<p>jo das klingt logisch <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>aber mir ist immer noch nicht klar wie ich diese Werte der Subklasse (zB: iAnzahlTassen) im überladenen &lt;&lt; operator wieder auslesen kann. ich kann es ja nicht direkt ansprechen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    />.</p>
<p>gruss quibb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/979339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/979339</guid><dc:creator><![CDATA[quibb]]></dc:creator><pubDate>Sat, 28 Jan 2006 21:56:18 GMT</pubDate></item><item><title><![CDATA[Reply to stl problem versch. klassen in einem container on Sat, 28 Jan 2006 22:19:25 GMT]]></title><description><![CDATA[<p>quibb schrieb:</p>
<blockquote>
<p>aber mir ist immer noch nicht klar wie ich diese Werte der Subklasse (zB: iAnzahlTassen) im überladenen &lt;&lt; operator wieder auslesen kann. ich kann es ja nicht direkt ansprechen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    />.</p>
</blockquote>
<p>Dein Beispiel macht auch nicht wirklich viel Sinn.<br />
Versuch mal das</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;sstream&gt;
using namespace std;

class AllgemeinesGeraet {   
    protected:

        string sGeraetBezeichnung;

    public:

       AllgemeinesGeraet():sGeraetBezeichnung() { }
       AllgemeinesGeraet(string sBezeichnung) : sGeraetBezeichnung( sBezeichnung ) { ;}
       virtual ~AllgemeinesGeraet() { 
          cout &lt;&lt; &quot;deleting &quot; &lt;&lt; sGeraetBezeichnung &lt;&lt; endl;
       }

       virtual string getBezeichnung() { return sGeraetBezeichnung; }

};

class Kaffeemaschine : public AllgemeinesGeraet {

    private:

        int iAnzahlTassen;

    public:
        virtual string getBezeichnung() { 
           stringstream str;
           str &lt;&lt; sGeraetBezeichnung &lt;&lt; &quot; mit &quot; &lt;&lt; iAnzahlTassen &lt;&lt; &quot; Tassen&quot;;
            return str.str(); 
        }

        Kaffeemaschine(string sBezeichnung, int iTassen) :AllgemeinesGeraet(sBezeichnung), iAnzahlTassen( iTassen ) { ;}
};

int main() {
    vector&lt;AllgemeinesGeraet*&gt; Geraete;   
    Geraete.push_back( new AllgemeinesGeraet(&quot;Waschmaschine&quot;) );
    Geraete.push_back( new Kaffeemaschine(&quot;Espresso-Maschine&quot;, 6 ) );

    for ( vector&lt;AllgemeinesGeraet*&gt;::iterator i = Geraete.begin(); i != Geraete.end(); ++i )
       cout &lt;&lt; (*i)-&gt;getBezeichnung() &lt;&lt; endl;

    cout &lt;&lt; &quot;cleaning up &quot; &lt;&lt; endl;

    for ( vector&lt;AllgemeinesGeraet*&gt;::iterator i = Geraete.begin(); i != Geraete.end(); ++i )
       delete *i;

}
</code></pre>
<p>Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/979356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/979356</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Sat, 28 Jan 2006 22:19:25 GMT</pubDate></item><item><title><![CDATA[Reply to stl problem versch. klassen in einem container on Sat, 28 Jan 2006 22:32:47 GMT]]></title><description><![CDATA[<p>ein ganzes programm, nice :). vielen dank, das werd ich mir jetzt mal genau anschauen.</p>
<p>gruss quibb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/979366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/979366</guid><dc:creator><![CDATA[quibb]]></dc:creator><pubDate>Sat, 28 Jan 2006 22:32:47 GMT</pubDate></item></channel></rss>