<?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 mit Zeigern auf Klasse]]></title><description><![CDATA[<p>Hi,<br />
ich habe ein recht großes Programm, weshalb ich hier auch nicht alles Posten kann. Es besteht aus einigen Klassen und ich habe 2 Probleme damit.<br />
1. In einer dieser Klassen (B) gibt es einen vector der mit Zeigern gefüllt wird. Diese Zeiger sollen auf Objekte zeigen die aus den beiden Kindklassen von A entstanden sind. Ist es richtig hier vector &lt;A*&gt; zu benutzen?<br />
2. Die Methode drucken() soll mir sämtliche Eigenschaften des jeweiligen Objekts ausgeben. Da ich aber nur Zeiger innerhalb eines Vectors besitze kann ich nicht einfach die Methode ausführen indem ich *obj_a1.drucken() sage.<br />
Wie gehe ich hier vor?</p>
<pre><code>class A{
private:
  ...
public:
  virtual void drucken(){
    std::cout&lt;&lt;&quot;Irgendwas&quot;&lt;&lt;endl;
  }
}

class A_1 :public A{
private:
  ...
public:
  void drucken(){
    A:drucken();
    std::cout&lt;&lt;&quot;Irgendwas neues&quot;&lt;&lt;endl;
  }
}

class A_2 :public A{
private:
  ...
public:
  void drucken(){
    A:drucken();
    std::cout&lt;&lt;&quot;Irgendwas anderes&quot;&lt;&lt;endl;
  }
}

class B{
private:
  vector&lt;A*&gt;liste;
  ...
public:
  ...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/335889/vector-mit-zeigern-auf-klasse</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Apr 2026 02:06:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/335889.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Dec 2015 13:56:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vector mit Zeigern auf Klasse on Fri, 18 Dec 2015 13:56:12 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich habe ein recht großes Programm, weshalb ich hier auch nicht alles Posten kann. Es besteht aus einigen Klassen und ich habe 2 Probleme damit.<br />
1. In einer dieser Klassen (B) gibt es einen vector der mit Zeigern gefüllt wird. Diese Zeiger sollen auf Objekte zeigen die aus den beiden Kindklassen von A entstanden sind. Ist es richtig hier vector &lt;A*&gt; zu benutzen?<br />
2. Die Methode drucken() soll mir sämtliche Eigenschaften des jeweiligen Objekts ausgeben. Da ich aber nur Zeiger innerhalb eines Vectors besitze kann ich nicht einfach die Methode ausführen indem ich *obj_a1.drucken() sage.<br />
Wie gehe ich hier vor?</p>
<pre><code>class A{
private:
  ...
public:
  virtual void drucken(){
    std::cout&lt;&lt;&quot;Irgendwas&quot;&lt;&lt;endl;
  }
}

class A_1 :public A{
private:
  ...
public:
  void drucken(){
    A:drucken();
    std::cout&lt;&lt;&quot;Irgendwas neues&quot;&lt;&lt;endl;
  }
}

class A_2 :public A{
private:
  ...
public:
  void drucken(){
    A:drucken();
    std::cout&lt;&lt;&quot;Irgendwas anderes&quot;&lt;&lt;endl;
  }
}

class B{
private:
  vector&lt;A*&gt;liste;
  ...
public:
  ...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2479969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479969</guid><dc:creator><![CDATA[Neuer001]]></dc:creator><pubDate>Fri, 18 Dec 2015 13:56:12 GMT</pubDate></item><item><title><![CDATA[Reply to vector mit Zeigern auf Klasse on Fri, 18 Dec 2015 14:03:07 GMT]]></title><description><![CDATA[<blockquote>
<p>Ist es richtig hier vector &lt;A*&gt; zu benutzen?</p>
</blockquote>
<p>Hätten wir für so einen Quatsch bloß 'nen Artikel...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479970</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 18 Dec 2015 14:03:07 GMT</pubDate></item><item><title><![CDATA[Reply to vector mit Zeigern auf Klasse on Fri, 18 Dec 2015 14:03:34 GMT]]></title><description><![CDATA[<p>1.: Nein - mit rohen Zeigern sollte man nicht arbeiten<br />
2.: Warum solltest Du das nicht können? Die Methode <code>drucken</code> ist doch virtuell.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479971</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Fri, 18 Dec 2015 14:03:34 GMT</pubDate></item><item><title><![CDATA[Reply to vector mit Zeigern auf Klasse on Fri, 18 Dec 2015 14:13:42 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<p>1.: Nein - mit rohen Zeigern sollte man nicht arbeiten</p>
</blockquote>
<p>Wie mach ich das denn besser?</p>
<p>tntnet schrieb:</p>
<blockquote>
<p>2.: Warum solltest Du das nicht können? Die Methode <code>drucken</code> ist doch virtuell.</p>
</blockquote>
<p>Ich habe jetzt z.b. eine Listenausgabe gemacht:</p>
<pre><code>for (int i = 0; i &lt; liste.size(); i++){
	*liste.at(i).drucken();
}
</code></pre>
<p>Da sagt er mir: Der Ausdruck muss einen Klassentyp aufweisen!<br />
Was mache ich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479972</guid><dc:creator><![CDATA[Neuer001]]></dc:creator><pubDate>Fri, 18 Dec 2015 14:13:42 GMT</pubDate></item><item><title><![CDATA[Reply to vector mit Zeigern auf Klasse on Fri, 18 Dec 2015 14:28:04 GMT]]></title><description><![CDATA[<p>Neuer001 schrieb:</p>
<blockquote>
<p>tntnet schrieb:</p>
<blockquote>
<p>1.: Nein - mit rohen Zeigern sollte man nicht arbeiten</p>
</blockquote>
<p>Wie mach ich das denn besser?</p>
</blockquote>
<p>Mit Smart Pointern. Hier ist <a href="http://en.cppreference.com/w/cpp/memory/unique_ptr" rel="nofollow">unique_ptr</a> sinnvoll:</p>
<pre><code>vector&lt;unique_ptr&lt;A&gt;&gt;liste;
liste.push_back(make_unique&lt;A_1&gt;());
liste.push_back(make_unique&lt;A_2&gt;());
</code></pre>
<p>Der Vorteil ist, dass man nicht von Hand <code>delete</code> aufrufen muss und es daher auch nicht vergessen kann oder sonst irgendeinen blöden Fehler den man gerne mit selbst reserviertem Speicher macht.</p>
<p>Neuer001 schrieb:</p>
<blockquote>
<p>Ich habe jetzt z.b. eine Listenausgabe gemacht:</p>
<pre><code>for (int i = 0; i &lt; liste.size(); i++){
	*liste.at(i).drucken();
}
</code></pre>
<p>Da sagt er mir: Der Ausdruck muss einen Klassentyp aufweisen!<br />
Was mache ich falsch?</p>
</blockquote>
<p>Das Dereferenzieren hat niedrigere Priorität als Memberfunktion aufrufen. Du müsstest also Klammern setzen:</p>
<pre><code>for (int i = 0; i &lt; liste.size(); i++) {
  (*liste.at(i)).drucken();
}
</code></pre>
<p>Oder kürzer: Den operator-&gt; nutzen:</p>
<pre><code>for (int i = 0; i &lt; liste.size(); i++) {
  liste.at(i)-&gt;drucken();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2479974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479974</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Fri, 18 Dec 2015 14:28:04 GMT</pubDate></item></channel></rss>