<?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[Vererbung von Funktionen]]></title><description><![CDATA[<p>Kann ich irgendwie erreichen, dass bei einem Funktionsaufruf hintereinander alle gleichnamigen Funktionen aller Basisklassen aufgerufen werden? Also:</p>
<pre><code class="language-cpp">struct CA {
  virtual void print() {
    std::cout &lt;&lt; &quot;Hallo!\n&quot;;
  }
};

struct CB : public CA {
  virtual void print() {
    std::cout &lt;&lt; &quot;Welt!\n&quot;;
  }
};

int main() {
  CB b;
  b.print(); // Soll sowohl &quot;Hallo&quot; als auch &quot;Welt&quot; ausgeben.
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/292878/vererbung-von-funktionen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 15:41:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/292878.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 19 Sep 2011 17:08:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vererbung von Funktionen on Mon, 19 Sep 2011 17:08:40 GMT]]></title><description><![CDATA[<p>Kann ich irgendwie erreichen, dass bei einem Funktionsaufruf hintereinander alle gleichnamigen Funktionen aller Basisklassen aufgerufen werden? Also:</p>
<pre><code class="language-cpp">struct CA {
  virtual void print() {
    std::cout &lt;&lt; &quot;Hallo!\n&quot;;
  }
};

struct CB : public CA {
  virtual void print() {
    std::cout &lt;&lt; &quot;Welt!\n&quot;;
  }
};

int main() {
  CB b;
  b.print(); // Soll sowohl &quot;Hallo&quot; als auch &quot;Welt&quot; ausgeben.
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2121369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121369</guid><dc:creator><![CDATA[vererber]]></dc:creator><pubDate>Mon, 19 Sep 2011 17:08:40 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung von Funktionen on Mon, 19 Sep 2011 17:19:00 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">struct CA {
  virtual void print() {
    std::cout &lt;&lt; &quot;Hallo!\n&quot;;
  }
};

struct CB : public CA {
  virtual void print() {
    CA::print();//Immer die Funktion der Vorhergehenden Klasse/Struktur
    std::cout &lt;&lt; &quot;Welt!\n&quot;;
  }
};

int main() {
  CB b;
  b.print(); // Wird sowohl &quot;Hallo!&quot; als auch &quot;Welt!&quot; ausgeben.
}
</code></pre>
<p>Ist aber nicht was du willst, oder...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121373</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 19 Sep 2011 17:19:00 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung von Funktionen on Mon, 19 Sep 2011 17:18:12 GMT]]></title><description><![CDATA[<p>Hmja, ich meinte halt schon, dass das automatisch passieren soll.. das scheint aber nicht zu funktionieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121374</guid><dc:creator><![CDATA[vererber]]></dc:creator><pubDate>Mon, 19 Sep 2011 17:18:12 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung von Funktionen on Mon, 19 Sep 2011 17:33:18 GMT]]></title><description><![CDATA[<p>vererber schrieb:</p>
<blockquote>
<p>Hmja, ich meinte halt schon, dass das automatisch passieren soll.. das scheint aber nicht zu funktionieren?</p>
</blockquote>
<p>Nicht so wie ich glaube wie du dir das Vorstellst, nein.</p>
<p>Edit: Was hast du gegen die Methode weiter oben ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121376</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 19 Sep 2011 17:33:18 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung von Funktionen on Mon, 19 Sep 2011 17:38:00 GMT]]></title><description><![CDATA[<p>Wie denn auch ?<br />
Durch</p>
<pre><code class="language-cpp">struct CB : public CA
</code></pre>
<p>bigst du ja nur alles was in CA steht an CB weiter , doch du rufst keine funktion auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121379</guid><dc:creator><![CDATA[7xCore]]></dc:creator><pubDate>Mon, 19 Sep 2011 17:38:00 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung von Funktionen on Tue, 20 Sep 2011 06:52:46 GMT]]></title><description><![CDATA[<p>Es ist zwar nicht das wonach du gefragt hast, aber ein ähnliches Verhalten kannst du mit einem Dekorator abbilden.</p>
<pre><code class="language-cpp">class CA
{
public:
    virtual void Print() const
    {
        std::cout &lt;&lt; &quot;Hallo &quot;;
    }
    virtual ~CA() {}
};

class CADecorator : public CA
{
public:
    explicit CADecorator(CA* decorated)
        : decorated_(decorated)
    {    
    }

    void Print() const
    {
        decorated_-&gt;Print();
        DoPrint();
    }

private:
    virtual void DoPrint() const = 0;
    std::unique_ptr&lt;CA&gt; decorated_;
};

class CB : public CADecorator
{
public:
    explicit CB(CA* decorated)
        : CADecorator(decorated)
    {   
    }
private:
    void DoPrint() const
    {
        std::cout &lt;&lt; &quot;Welt! &quot;;
    }
};

class CC : public CADecorator
{
public:
    explicit CC(CA* decorated)
        : CADecorator(decorated)
    {   
    }
private:
    void DoPrint() const
    {
        std::cout &lt;&lt; &quot;Ende &quot;;
    }
};

int main(int argc, char* argv[])
{
    CC c(new CB(new CA));
    c.Print();

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2121489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121489</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Tue, 20 Sep 2011 06:52:46 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung von Funktionen on Wed, 21 Sep 2011 12:35:28 GMT]]></title><description><![CDATA[<p>Überlege Dir mal die Konsequenz, wenn dort etwas automatisch in der Oberklasse aufgerufen werden soll. Wenn festgelegt sein würde, dass immer zuerst die Methode der Oberklasse aufgerufen wird, dann würde &quot;Hallo!&quot; und &quot;Welt!&quot; in dieser Reihenfolge ausgegeben .<br />
Das ist ggf. nicht für alle Fälle gewünscht. In anderen Fällen möchte man evtl. die überschriebene Methode in der Oberklasse gar nicht oder irgendwann (z.B. am Ende um &quot;Welt!&quot; &quot;Hallo!&quot; in dieser Reihenfolge auszugeben) in der überschriebenen Methode abarbeiten lassen.<br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2122081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2122081</guid><dc:creator><![CDATA[Helmut.Jakoby]]></dc:creator><pubDate>Wed, 21 Sep 2011 12:35:28 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung von Funktionen on Wed, 21 Sep 2011 13:39:34 GMT]]></title><description><![CDATA[<p>Eine Alternative wäre Non-Virtual-Interface und Template-Method.</p>
<pre><code class="language-cpp">class A {
  virtual void pre_print() {}
  virtual void post_print() {}

public:  
// final
  void print { 
	pre_print();
	std::cout &lt;&lt; &quot;Hallo&quot;; 
	post_print();
  }
}

class B : A {
  virtual void post_print() { std::cout &lt;&lt; &quot; Welt!&quot;; }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2122112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2122112</guid><dc:creator><![CDATA[Panke]]></dc:creator><pubDate>Wed, 21 Sep 2011 13:39:34 GMT</pubDate></item></channel></rss>