<?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[vector&amp;lt;basisklasse&amp;gt; kopieren und info &amp;quot;Vererbte klasse&amp;quot; und deren Attribute behalten]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe mein Problem mal so weit runtergebrochen wie möglich. Bin ein Anfänger in C++ und kenne mich gerade im Bereich Vererbung und Polymorphismus sehr schlecht aus. Nach stundenlanger Suche verzweifle ich nun und erstelle meinen ersten Thread.</p>
<p>Ich würde gerne einen Vektor kopieren, der als Typ die Basisklasse enthält. Allerdings weiß ich nicht richtig wie. Möchte ich auf die kopierten Objekte der Child-Klasse zugreifen, so funktioniert das nicht.<br />
Mein bisheriger Ansatz war nicht erfolgreich (siehe folgender Code)</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

using namespace std;

class strassenobjekt
{
public:
    int typ;
    int abstand_links;
    int abstand_rechts;

    strassenobjekt(int typ,int abstand_links, int abstand_rechts)
    {

        this-&gt;typ = typ;
        this-&gt;abstand_links = abstand_links;
        this-&gt;abstand_rechts = abstand_rechts;
    }
    virtual int getValue()
    {
        return -1;
    }
};

class lane : public strassenobjekt
{
public:
    int laneStyle;

    lane(int lanestyle, int typ, int abstand_links, int abstand_rechts)
        : strassenobjekt(typ,abstand_links, abstand_rechts),laneStyle(lanestyle)
    {

    }

    int getValue()
    {
        return laneStyle;
    }
};

class barrier: public strassenobjekt
{
public:
    int barrierStyle;

    barrier(int barrierstyle, int typ,int abstand_links, int abstand_rechts)
        : strassenobjekt(typ,abstand_links, abstand_rechts),barrierStyle(barrierstyle)
    {

    }

    int getValue()
    {
        return barrierStyle;
    }
};

int main()
{

    vector&lt;strassenobjekt*&gt; * Liste1 = new vector&lt;strassenobjekt*&gt;;
    vector&lt;strassenobjekt*&gt; * Liste2 = new vector&lt;strassenobjekt*&gt;;

    lane * linie1 = new lane(1,2,3,4);
    barrier * linie2 = new barrier(5,6,7,8);
    Liste1-&gt;push_back(linie1);
    Liste1-&gt;push_back(linie2);

    *Liste2 = *Liste1;                           //damit die Größe auch stimmt
    for(int i = 0; i&lt;Liste1-&gt;size();i++)
    {
        strassenobjekt * das_i_te = new strassenobjekt(0,0,0); //Hier liegt wohl das Problem...
        *das_i_te = *Liste2-&gt;at(i);            //Wert von Adresse
        Liste2-&gt;at(i)=das_i_te;                  //Adresse wird geändert, Wert bleibt gleich

    }

        strassenobjekt *test1 = Liste1-&gt;at(1);
        strassenobjekt* test2 = Liste2-&gt;at(1);

        cout &lt;&lt; test1-&gt;getValue() &lt;&lt; endl;
        cout &lt;&lt; test2-&gt;getValue() &lt;&lt; endl;
cout
};
</code></pre>
<p>Output:</p>
<pre><code>5
-1
</code></pre>
<p>Also das Problem bei der ganzen Geschichte ist, dass die Basisklasse-Attribute kopiert werden, aber nicht das Objekt an sich.. Somit habe ich nurnoch die Attribute der Basisklasse und das Objekt weiß nicht, dass es eigentlich von der Klasse &quot;lane&quot; sein soll.</p>
<p>Viele Grüße</p>
<p>yoko</p>
<p>edit von volkard: cpp-Tags eingefügt.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/293869/vector-lt-basisklasse-gt-kopieren-und-info-quot-vererbte-klasse-quot-und-deren-attribute-behalten</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 05:01:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/293869.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Oct 2011 14:11:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vector&amp;lt;basisklasse&amp;gt; kopieren und info &amp;quot;Vererbte klasse&amp;quot; und deren Attribute behalten on Wed, 12 Oct 2011 19:20:19 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe mein Problem mal so weit runtergebrochen wie möglich. Bin ein Anfänger in C++ und kenne mich gerade im Bereich Vererbung und Polymorphismus sehr schlecht aus. Nach stundenlanger Suche verzweifle ich nun und erstelle meinen ersten Thread.</p>
<p>Ich würde gerne einen Vektor kopieren, der als Typ die Basisklasse enthält. Allerdings weiß ich nicht richtig wie. Möchte ich auf die kopierten Objekte der Child-Klasse zugreifen, so funktioniert das nicht.<br />
Mein bisheriger Ansatz war nicht erfolgreich (siehe folgender Code)</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

using namespace std;

class strassenobjekt
{
public:
    int typ;
    int abstand_links;
    int abstand_rechts;

    strassenobjekt(int typ,int abstand_links, int abstand_rechts)
    {

        this-&gt;typ = typ;
        this-&gt;abstand_links = abstand_links;
        this-&gt;abstand_rechts = abstand_rechts;
    }
    virtual int getValue()
    {
        return -1;
    }
};

class lane : public strassenobjekt
{
public:
    int laneStyle;

    lane(int lanestyle, int typ, int abstand_links, int abstand_rechts)
        : strassenobjekt(typ,abstand_links, abstand_rechts),laneStyle(lanestyle)
    {

    }

    int getValue()
    {
        return laneStyle;
    }
};

class barrier: public strassenobjekt
{
public:
    int barrierStyle;

    barrier(int barrierstyle, int typ,int abstand_links, int abstand_rechts)
        : strassenobjekt(typ,abstand_links, abstand_rechts),barrierStyle(barrierstyle)
    {

    }

    int getValue()
    {
        return barrierStyle;
    }
};

int main()
{

    vector&lt;strassenobjekt*&gt; * Liste1 = new vector&lt;strassenobjekt*&gt;;
    vector&lt;strassenobjekt*&gt; * Liste2 = new vector&lt;strassenobjekt*&gt;;

    lane * linie1 = new lane(1,2,3,4);
    barrier * linie2 = new barrier(5,6,7,8);
    Liste1-&gt;push_back(linie1);
    Liste1-&gt;push_back(linie2);

    *Liste2 = *Liste1;                           //damit die Größe auch stimmt
    for(int i = 0; i&lt;Liste1-&gt;size();i++)
    {
        strassenobjekt * das_i_te = new strassenobjekt(0,0,0); //Hier liegt wohl das Problem...
        *das_i_te = *Liste2-&gt;at(i);            //Wert von Adresse
        Liste2-&gt;at(i)=das_i_te;                  //Adresse wird geändert, Wert bleibt gleich

    }

        strassenobjekt *test1 = Liste1-&gt;at(1);
        strassenobjekt* test2 = Liste2-&gt;at(1);

        cout &lt;&lt; test1-&gt;getValue() &lt;&lt; endl;
        cout &lt;&lt; test2-&gt;getValue() &lt;&lt; endl;
cout
};
</code></pre>
<p>Output:</p>
<pre><code>5
-1
</code></pre>
<p>Also das Problem bei der ganzen Geschichte ist, dass die Basisklasse-Attribute kopiert werden, aber nicht das Objekt an sich.. Somit habe ich nurnoch die Attribute der Basisklasse und das Objekt weiß nicht, dass es eigentlich von der Klasse &quot;lane&quot; sein soll.</p>
<p>Viele Grüße</p>
<p>yoko</p>
<p>edit von volkard: cpp-Tags eingefügt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130506</guid><dc:creator><![CDATA[yoko]]></dc:creator><pubDate>Wed, 12 Oct 2011 19:20:19 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;basisklasse&amp;gt; kopieren und info &amp;quot;Vererbte klasse&amp;quot; und deren Attribute behalten on Wed, 12 Oct 2011 14:22:02 GMT]]></title><description><![CDATA[<p>Du hast doch auch ein <code>strassenobjekt</code> erzeugt.</p>
<pre><code class="language-cpp">strassenobjekt * das_i_te = new strassenobjekt(0,0,0);
</code></pre>
<p>Also kommt am Ende auch ein strassenobjekt dabei raus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130513</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Wed, 12 Oct 2011 14:22:02 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;basisklasse&amp;gt; kopieren und info &amp;quot;Vererbte klasse&amp;quot; und deren Attribute behalten on Wed, 12 Oct 2011 14:24:30 GMT]]></title><description><![CDATA[<p>und wie mache ich das dann dynamisch, dass es immer das Objekt erstellt, das ich momentan habe? Irgendwie hatte ich gehofft, das funktioniert durch das Kopieren <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2130515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130515</guid><dc:creator><![CDATA[yoko]]></dc:creator><pubDate>Wed, 12 Oct 2011 14:24:30 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;basisklasse&amp;gt; kopieren und info &amp;quot;Vererbte klasse&amp;quot; und deren Attribute behalten on Wed, 12 Oct 2011 14:26:49 GMT]]></title><description><![CDATA[<p>Wobei lane und barrier ja von strassenobjekt erben, weshalb ich sie überhaupt dem Vektor hinzufügen konnte. Deshalb erschien es mir logisch, dass auch beim kopieren das strassenobjekt seine vererbte Klasse erkennt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130518</guid><dc:creator><![CDATA[yoko]]></dc:creator><pubDate>Wed, 12 Oct 2011 14:26:49 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;basisklasse&amp;gt; kopieren und info &amp;quot;Vererbte klasse&amp;quot; und deren Attribute behalten on Wed, 12 Oct 2011 14:40:17 GMT]]></title><description><![CDATA[<p>yoko schrieb:</p>
<blockquote>
<p>und wie mache ich das dann dynamisch, dass es immer das Objekt erstellt, das ich momentan habe? Irgendwie hatte ich gehofft, das funktioniert durch das Kopieren <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>
</blockquote>
<p><a href="http://www.cplusplus.com/reference/std/typeinfo/type_info/" rel="nofollow">typeid()</a>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130528</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Wed, 12 Oct 2011 14:40:17 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;basisklasse&amp;gt; kopieren und info &amp;quot;Vererbte klasse&amp;quot; und deren Attribute behalten on Wed, 12 Oct 2011 14:44:02 GMT]]></title><description><![CDATA[<p>Du wirst wohl nicht umhin kommen, irgendwie eine Kopierfunktion für deine Objekte bereitzustellen. Das einfachste ist wohl <code>clone()</code> als Member Funktion:</p>
<pre><code class="language-cpp">class MyBaseClass
{
public:
   ~MyBaseClass()
   {
   }

   virtual MyBaseClass* clone() const = 0;
};

class MyDerivedClass : public MyBaseClass
{
public:
   MyBaseClass* clone() const
   {
      return new MyDerivedClass( *this );
   }
};
</code></pre>
<p>Dann musst du noch den Eingangsvektor durchlaufen und für jedes Element <code>clone()</code> aufrufen:</p>
<pre><code class="language-cpp">int main()
{
   for( vector&lt;MyBaseClass*&gt;::const_iterator i = ev.begin(); i != ev.end(); ++i )
  {
     av.push_back( (**i).clone() );
  }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2130533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130533</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 12 Oct 2011 14:44:02 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;basisklasse&amp;gt; kopieren und info &amp;quot;Vererbte klasse&amp;quot; und deren Attribute behalten on Wed, 12 Oct 2011 15:34:21 GMT]]></title><description><![CDATA[<p>vielen Dank! ich werde das gleich mal probieren!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130571</guid><dc:creator><![CDATA[yoko]]></dc:creator><pubDate>Wed, 12 Oct 2011 15:34:21 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;basisklasse&amp;gt; kopieren und info &amp;quot;Vererbte klasse&amp;quot; und deren Attribute behalten on Wed, 12 Oct 2011 15:41:35 GMT]]></title><description><![CDATA[<p>Schon was von C++-Tags gehört?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130579</guid><dc:creator><![CDATA[[Rew.]]]></dc:creator><pubDate>Wed, 12 Oct 2011 15:41:35 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;basisklasse&amp;gt; kopieren und info &amp;quot;Vererbte klasse&amp;quot; und deren Attribute behalten on Wed, 12 Oct 2011 19:15:41 GMT]]></title><description><![CDATA[<p>no <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=":/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130680</guid><dc:creator><![CDATA[yoko]]></dc:creator><pubDate>Wed, 12 Oct 2011 19:15:41 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;basisklasse&amp;gt; kopieren und info &amp;quot;Vererbte klasse&amp;quot; und deren Attribute behalten on Thu, 13 Oct 2011 09:57:02 GMT]]></title><description><![CDATA[<p>Warum erstellst du eigentlich alles am Heap?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130880</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 13 Oct 2011 09:57:02 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;basisklasse&amp;gt; kopieren und info &amp;quot;Vererbte klasse&amp;quot; und deren Attribute behalten on Thu, 13 Oct 2011 09:59:08 GMT]]></title><description><![CDATA[<p>und warum gibts da kein delete?</p>
<p>kommst du von Java?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130881</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 13 Oct 2011 09:59:08 GMT</pubDate></item></channel></rss>