<?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[Ableitungen]]></title><description><![CDATA[<p>Hallo,<br />
ich habe eine Hauptklasse mit virtuellen Methoden</p>
<pre><code class="language-cpp">class haupt {
  private:
    std::string was_auch_immer;
  public:
    virtual void test() = 0;
}
</code></pre>
<p>von denen mehrere Unterklassen abgeleitet werden</p>
<pre><code class="language-cpp">class sub : public haupt {
  public:
    int i;
    void test() { return }
}
</code></pre>
<p>Ist es möglich Pointer auf Instanzen von <em>sub</em> in einem Vektor für Pointer auf <em>haupt</em> zu speichern?</p>
<pre><code class="language-cpp">sub *abgeleitete_klasse = new sub();
std::vector &lt;class *haupt&gt; moo;
moo.push_back(abgeleitete_klasse);
</code></pre>
<p>PS: Ich habe hier gerade leider keinen C++-Compiler zur Hand, würde es sonst in der Praxis testen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/176832/ableitungen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 15:29:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/176832.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 25 Mar 2007 15:35:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ableitungen on Sun, 25 Mar 2007 15:35:40 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe eine Hauptklasse mit virtuellen Methoden</p>
<pre><code class="language-cpp">class haupt {
  private:
    std::string was_auch_immer;
  public:
    virtual void test() = 0;
}
</code></pre>
<p>von denen mehrere Unterklassen abgeleitet werden</p>
<pre><code class="language-cpp">class sub : public haupt {
  public:
    int i;
    void test() { return }
}
</code></pre>
<p>Ist es möglich Pointer auf Instanzen von <em>sub</em> in einem Vektor für Pointer auf <em>haupt</em> zu speichern?</p>
<pre><code class="language-cpp">sub *abgeleitete_klasse = new sub();
std::vector &lt;class *haupt&gt; moo;
moo.push_back(abgeleitete_klasse);
</code></pre>
<p>PS: Ich habe hier gerade leider keinen C++-Compiler zur Hand, würde es sonst in der Praxis testen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1252282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1252282</guid><dc:creator><![CDATA[marc_]]></dc:creator><pubDate>Sun, 25 Mar 2007 15:35:40 GMT</pubDate></item><item><title><![CDATA[Reply to Ableitungen on Sun, 25 Mar 2007 16:01:06 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">sub my_class;
std::vector&lt;haupt*&gt; moo;
moo.push_back(reinterpret_cast&lt;haupt*&gt;(&amp;my_class));
</code></pre>
<p>habs auch nicht getestet ... aber sollte doch gehen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1252298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1252298</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 25 Mar 2007 16:01:06 GMT</pubDate></item><item><title><![CDATA[Reply to Ableitungen on Sun, 25 Mar 2007 16:54:16 GMT]]></title><description><![CDATA[<p>Ja, das geht. Hast nur nen kleinen Syntaxfehler drin:</p>
<pre><code class="language-cpp">sub* abgeleitete_klasse = new sub();
std::vector&lt;haupt*&gt; moo;
moo.push_back(abgeleitete_klasse);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1252340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1252340</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Sun, 25 Mar 2007 16:54:16 GMT</pubDate></item><item><title><![CDATA[Reply to Ableitungen on Sun, 25 Mar 2007 18:05:37 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<pre><code class="language-cpp">sub my_class;
std::vector&lt;haupt*&gt; moo;
moo.push_back(reinterpret_cast&lt;haupt*&gt;(&amp;my_class));
</code></pre>
<p>habs auch nicht getestet ... aber sollte doch gehen ...</p>
</blockquote>
<p>brauchst keinen reinterpret_cast. von abgeleiteter Klasse zur basisklasse wird automatisch konvertiert. nur runter brauchst du entweder den dynamic_cast oder, wenn du genau weist was du tust, den static_cast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1252398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1252398</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 25 Mar 2007 18:05:37 GMT</pubDate></item><item><title><![CDATA[Reply to Ableitungen on Sun, 25 Mar 2007 18:07:20 GMT]]></title><description><![CDATA[<p>hmm ja stimmt is nen bissel unnötig der cast ... sorry</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1252402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1252402</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 25 Mar 2007 18:07:20 GMT</pubDate></item><item><title><![CDATA[Reply to Ableitungen on Sun, 25 Mar 2007 19:21:39 GMT]]></title><description><![CDATA[<p>Danke, für die Bestätigung, bzw Fehlerkorrektur. <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>Wenn ich gerade dabei bin, möchte ich auch noch folgende Frage in den Raum werfen, die mich seit einigen Tagen beschäfftigt:<br />
Folgender (mehr oder weniger) Pseudocode soll mit Hilfe des überladenen &lt;&lt;-Operators eine bestimmte Funktion ausführen, die jedoch in Anbetracht des Fehlers unbedeutend ist - auch eine andersweitige Umsetzung auf Grund des angestrebten Codedesigns ist nicht möglich.</p>
<pre><code class="language-cpp">class main {
  public:
  virtual void mach_was() = 0;

  //////////////////////////////
  template &lt;class obj_t&gt;     // obj_r repräsentiert ausschließlich von _main_ abgeleitete Klassen
  obj_t * &amp;operator &lt;&lt;(obj_t * &amp;element) {
    element-&gt;mach_was(); // nicht unbedingt von Belang
    return *this;
  }
  //////////////////////////////
};

class foo : public {
  void mach_was();
  // weitere deklarationen
};

class bar : public {
  void mach_was();
  // weitere deklarationen
};

// + weitere klassen, die von main abgeleitet sind

main() {
  foo *foo_elem = new foo;
  bar *bar_elem = new bar;
  bar *bar_elem2 = new bar;

  ////////////////////////////
  *foo_elem &lt;&lt; bar_elem &lt;&lt; bar_elem2;
  ////////////////////////////
  return 0;
}
</code></pre>
<p>Wie schaffe ich, den &lt;&lt;-Operator bei Pointern sinnvoll einzusetzen, sodass obiger Code kompilierbar ist. Die eigentlichen &quot;Problemzonen&quot; sind entsprechend mit &quot;/////&quot; gekennzeichnet.</p>
<p>Danke bereits im voraus,<br />
Marc <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/1252477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1252477</guid><dc:creator><![CDATA[marc_]]></dc:creator><pubDate>Sun, 25 Mar 2007 19:21:39 GMT</pubDate></item><item><title><![CDATA[Reply to Ableitungen on Sun, 25 Mar 2007 19:26:21 GMT]]></title><description><![CDATA[<p>Kleine Ergänzung: In Bezug auf das oben erwähnte &quot;angestrebte Codedesign&quot; wäre folgender Aufruf das komfortabelste. D.h. dass man bei Benutzung der Operatoren nicht unbedingt auf die entsprechend verwendeten Zeiger achten muss.</p>
<pre><code class="language-cpp">// [...]

  ////////////////////////////
  foo_elem &lt;&lt; bar_elem &lt;&lt; bar_elem2;
  ////////////////////////////
  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1252484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1252484</guid><dc:creator><![CDATA[marc_]]></dc:creator><pubDate>Sun, 25 Mar 2007 19:26:21 GMT</pubDate></item><item><title><![CDATA[Reply to Ableitungen on Mon, 26 Mar 2007 04:17:53 GMT]]></title><description><![CDATA[<p>Bin mir nicht 100% sicher, aber:</p>
<p>soweit ich bisher operator&lt;&lt; gesehen habe nimmt der doch immer 2 Argumente: das was rechts davon steht und das was links davon steht.</p>
<p>Falls ich recht habe heiszt es also:</p>
<pre><code class="language-cpp">friend obj_t * &amp;operator &lt;&lt;(main &amp;rechts,obj_t * &amp;element) {
    element-&gt;mach_was(); // nicht unbedingt von Belang
    return *this;
  }
  /////
</code></pre>
<p>Aber da du scheinbar mehr Ahnung hast von C++ als ich würds mich nicht wundern wenn der Fehler woanders läge.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1252603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1252603</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Mon, 26 Mar 2007 04:17:53 GMT</pubDate></item><item><title><![CDATA[Reply to Ableitungen on Mon, 26 Mar 2007 05:03:58 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class main {
  public:
  virtual void mach_was() = 0;

  main&amp; operator &lt;&lt;(main* element) {
    element-&gt;mach_was();
    return *this;
  }
  //oder alternativ
  template &lt;class obj_t&gt;
  obj_t&amp; operator &lt;&lt;(obj_t * element) {
    element-&gt;mach_was();
    return *this;
  }
};
</code></pre>
<p>probier erstmal aus, ob dich das glücklich macht ;). die template lösung würde ich aber nur nutzen, wenn es wichtig ist, dass du ein obj_t zurückbekommst. wenn ein main reicht, dann würde ich auf die templates verzichten <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>btw: fehlermeldungen sind bei solchen sachen ganz nützlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1252611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1252611</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Mon, 26 Mar 2007 05:03:58 GMT</pubDate></item></channel></rss>