<?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[Verschiedene Klassen speichern und wiedergeben]]></title><description><![CDATA[<p>Mein prof hat mir heute ein dummes blatt gegeben mit so einer echt dummen formulieren mit der man kaum was anfangen kann.</p>
<p>leider hat das mich nun irgendwie aus dem konzept gebracht es &quot;elegant&quot; zu lösen.<br />
eine teilaufgabe ist verschiedene klassen also z.b.</p>
<pre><code class="language-cpp">class a{};
class b: public a{};
class c: public a{};
</code></pre>
<p>im programm &quot;festhalten&quot; (wie ist nicht gegeben, liegt mir frei)<br />
um die wieder auszugeben. sein tipp: zwei arrays und anschließend nacheinander ausgeben...</p>
<p>wie würdet ihr diese dynamisch anlegen um diese später wieder auszugeben ?<br />
mittels rtti ?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/178463/verschiedene-klassen-speichern-und-wiedergeben</link><generator>RSS for Node</generator><lastBuildDate>Sun, 20 Sep 2026 22:22:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/178463.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 11 Apr 2007 13:09:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verschiedene Klassen speichern und wiedergeben on Wed, 11 Apr 2007 13:09:17 GMT]]></title><description><![CDATA[<p>Mein prof hat mir heute ein dummes blatt gegeben mit so einer echt dummen formulieren mit der man kaum was anfangen kann.</p>
<p>leider hat das mich nun irgendwie aus dem konzept gebracht es &quot;elegant&quot; zu lösen.<br />
eine teilaufgabe ist verschiedene klassen also z.b.</p>
<pre><code class="language-cpp">class a{};
class b: public a{};
class c: public a{};
</code></pre>
<p>im programm &quot;festhalten&quot; (wie ist nicht gegeben, liegt mir frei)<br />
um die wieder auszugeben. sein tipp: zwei arrays und anschließend nacheinander ausgeben...</p>
<p>wie würdet ihr diese dynamisch anlegen um diese später wieder auszugeben ?<br />
mittels rtti ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1263823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1263823</guid><dc:creator><![CDATA[Stelfer]]></dc:creator><pubDate>Wed, 11 Apr 2007 13:09:17 GMT</pubDate></item><item><title><![CDATA[Reply to Verschiedene Klassen speichern und wiedergeben on Wed, 11 Apr 2007 13:23:43 GMT]]></title><description><![CDATA[<p>Also wenn die Aufgabe so wenig Infos enthält, wie dein Beitrag, dann kann ich deine Verwirrtheit nachvollziehen <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>Du sollst wirklich Klassen festhalten? Oder vielleicht doch Objekte?<br />
Objekte zu speichern ist ja kein Problem, da kommt es dann aber einfach darauf an, was mit diesen gemacht werden soll.</p>
<p>Wenn jetzt aber gemeint ist, dass man die Klassennamen ausgeben soll, gibt es einmal die Möglichkeit der RTTI oder eigene virtuelle Methoden mit den Klassennamen zu schreiben. Dazu gibt es aber parallel noch einen Thread.</p>
<p>Edit: Einen Punkt habe ich noch vegessen: wenn es um die Zuordnung von string-&gt;Klasse geht um zB Instanzen zu erzeugen, dann bietet sich eine Map mit aus strings und Callback-Funktionen an, die die konkreten Instanzen erzeugen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1263826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1263826</guid><dc:creator><![CDATA[viande]]></dc:creator><pubDate>Wed, 11 Apr 2007 13:23:43 GMT</pubDate></item><item><title><![CDATA[Reply to Verschiedene Klassen speichern und wiedergeben on Wed, 11 Apr 2007 15:56:24 GMT]]></title><description><![CDATA[<p>Zeig doch mal die Originalaufgabenstellung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1263945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1263945</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Wed, 11 Apr 2007 15:56:24 GMT</pubDate></item><item><title><![CDATA[Reply to Verschiedene Klassen speichern und wiedergeben on Wed, 11 Apr 2007 18:05:32 GMT]]></title><description><![CDATA[<p>mit festhalten meint er z.b. einen array dynamisch allokierten speicher (ein Objekt) zuweisen</p>
<p>nochmal aber besser (war vorhin in eile):</p>
<p>es gibt 3 Klassen davon ist eine die Basisklasse.<br />
demnach habe ich 2 abgeleitete klassen. meine frage ist:<br />
wie kann ich diese zwei objekte elegant in einem array unterbringen bzw. STL</p>
<p>meine Lösungen sind meiner Ansicht nach schlecht und ich probiere hier auch wenig angaben zu machen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1264079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1264079</guid><dc:creator><![CDATA[Stelfer]]></dc:creator><pubDate>Wed, 11 Apr 2007 18:05:32 GMT</pubDate></item><item><title><![CDATA[Reply to Verschiedene Klassen speichern und wiedergeben on Wed, 11 Apr 2007 18:29:48 GMT]]></title><description><![CDATA[<p>Ich glaube Du hast da selbst noch ein Verständnisproblem. Du sagst in einem Satz Du hast zwei abgeleitete Klassen, und im nächsten fragst Du wo Du &quot;die zwei Objekte&quot; unterbringen kannst. Ja, welche Objekte? Du hast bisher nur Klassen.</p>
<p>Mal ein Ansatz (Stichwort polymorphe Zeiger)</p>
<pre><code class="language-cpp">vector&lt;a*&gt; daten;

b B1;
b B2;
c C1;
c C2;

daten.push_back(&amp;B1);
daten.push_back(&amp;C1); // jetzt liegen in dem vector je ein b- und ein c-Objekt
daten.push_back(&amp;B2);
daten.push_back(&amp;C2); // und jetzt je zwei
</code></pre>
<p>Die Objekte darfst Du natürlich auch mit new anlegen und in den vector schieben (damit hast Du aber zusätzlichen Aufräumaufwand).</p>
<p>Dann die Ausgabe: Du kannst Klassen oder Objekte nicht ausgeben, sondern nur ein Datum daraus. Meint Dein Prof vielleicht, dass Du in a eine virtuelle Funktion anlegen und diese in b und c angemessen überschreiben sollst?</p>
<p>Auch hier ein Ansatz:</p>
<pre><code class="language-cpp">class a {
public:
    const char* myname() const = 0;
};

/* b und c seien Deiner Fantasie überlassen */

/* Wir verwenden den vector von oben */
for (vector&lt;a*&gt;::iterator it = daten.begin(); it != daten.end(); ++it) {
    cout &lt;&lt; (*it)-&gt;myname() &lt;&lt; endl;
}
</code></pre>
<p>Auf die Verwendung von for_each und Ausgabeiteratoren wurde bewusst verzichtet!</p>
<p>EDIT:<br />
Über &quot;zwei Arrays&quot; bin ich erst jetzt gestolpert. Meint er vielleicht etwas dermassen banales?</p>
<pre><code class="language-cpp">a array1[54];
b array2[5];
</code></pre>
<p><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>
]]></description><link>https://www.c-plusplus.net/forum/post/1264103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1264103</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 11 Apr 2007 18:29:48 GMT</pubDate></item><item><title><![CDATA[Reply to Verschiedene Klassen speichern und wiedergeben on Wed, 11 Apr 2007 19:29:05 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>EDIT:<br />
Über &quot;zwei Arrays&quot; bin ich erst jetzt gestolpert. Meint er vielleicht etwas dermassen banales?</p>
<pre><code class="language-cpp">a array1[54];
b array2[5];
</code></pre>
<p><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>der prof is bissel lahm, daher wollte ich nach einer guten aber nicht zu guten lösung ausschau halten.</p>
<p>Der prof macht im prinzip immer solche aufgaben die man erstmal schlecht programmieren sollte und dann im nächsten schritt die verbesserung.</p>
<p>z.b. sagt der wir sollen eine elementenfkt schreiben die diese klasse ausgibt, im nächsten schritt sollen wir den operator überladen</p>
<pre><code class="language-cpp">ostream&amp; operator&lt;&lt;(ostream&amp; stream, CLASS cl)
</code></pre>
<p>bitte fragt nicht, der mann wills so <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>aber im prinzip denk ich mal &quot;der kann mich ....&quot; ich gebe ihm halt das prog mit der STL ab <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="😉"
    /> oder was meint ihr ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1264150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1264150</guid><dc:creator><![CDATA[Stelfer]]></dc:creator><pubDate>Wed, 11 Apr 2007 19:29:05 GMT</pubDate></item><item><title><![CDATA[Reply to Verschiedene Klassen speichern und wiedergeben on Wed, 11 Apr 2007 19:45:41 GMT]]></title><description><![CDATA[<p>Hallo Stelfer,</p>
<p>vielleicht meint er sowas:</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;
#include &lt;iostream&gt;

class A
{
public:
    virtual ~A()= 0 {}
    virtual void print( std::ostream&amp; out ) const = 0;

    friend std::ostream&amp; operator&lt;&lt;( std::ostream&amp; out, const A&amp; a )
    {
        a.print( out );
        return out;
    }
};

class B : public A
{
public:
    explicit B( int val = 0 ) : m_val( val ) {}
    virtual void print( std::ostream&amp; out ) const
    {
        out &lt;&lt; &quot;B &quot; &lt;&lt; m_val;
    }
private:
    int m_val;
};

class C : public A
{
public:
    explicit C( double val = 0 ) : m_val( val ) {}
    virtual void print( std::ostream&amp; out ) const
    {
        out &lt;&lt; &quot;C &quot; &lt;&lt; m_val;
    }
private:
    double m_val;
};

void printA( const A* a )
{
    std::cout &lt;&lt; &quot;&gt; &quot; &lt;&lt; *a &lt;&lt; std::endl;
}

void delA( A* a )
{
    delete a;
}

int main ()
{
    using namespace std;

    vector&lt; A* &gt; aa;
    aa.push_back( new B( 27 ) );
    aa.push_back( new C( 1.23 ) );
    aa.push_back( new B( -3 ) );

    for_each( aa.begin(), aa.end(), &amp;printA );

    // -- aufräumen
    for_each( aa.begin(), aa.end(), &amp;delA );
    return 0;
}
</code></pre>
<p>Der Output wäre:</p>
<pre><code>&gt; B 27
&gt; C 1.23
&gt; B -3
</code></pre>
<p>Zu empfehlen ist hier natürlich std::vector&lt; <a href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm" rel="nofollow">boost::shared_ptr&lt; A &gt;</a> &gt; statt std::vector&lt; A* &gt;, dann spart man sich das aufräumen.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1264165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1264165</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 11 Apr 2007 19:45:41 GMT</pubDate></item></channel></rss>