<?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[Muss bei einer abstrakten Klasse jede Funktion überladen werden?]]></title><description><![CDATA[<p>Hallo.<br />
Muss bei einer Interfaceklasse (= abstrakte Klasse) jede Funktion überladen werden? Wenn ja, wie kann ich das vermeiden?</p>
<p>So sieht es momentan aus:</p>
<pre><code class="language-cpp">class IFace
{
public:
    virtual void Func1() = 0;
    virtual void Func2(bool X) = 0;
};
</code></pre>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/266145/muss-bei-einer-abstrakten-klasse-jede-funktion-überladen-werden</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 10:23:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/266145.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 04 May 2010 15:02:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Muss bei einer abstrakten Klasse jede Funktion überladen werden? on Tue, 04 May 2010 15:02:58 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Muss bei einer Interfaceklasse (= abstrakte Klasse) jede Funktion überladen werden? Wenn ja, wie kann ich das vermeiden?</p>
<p>So sieht es momentan aus:</p>
<pre><code class="language-cpp">class IFace
{
public:
    virtual void Func1() = 0;
    virtual void Func2(bool X) = 0;
};
</code></pre>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1892330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1892330</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Tue, 04 May 2010 15:02:58 GMT</pubDate></item><item><title><![CDATA[Reply to Muss bei einer abstrakten Klasse jede Funktion überladen werden? on Tue, 04 May 2010 15:05:55 GMT]]></title><description><![CDATA[<p>Solange auch nur eine abstrakte Funktion nicht überladen ist, gilt die gesamte Klasse als Abstrakt. Du willst das nicht? Dann mach die Funktionen nicht abstrakt. Gib den Funktionen als Alternative einen Funktionskörper der nichts tut.</p>
<p>virtual void Foo() {}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1892331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1892331</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Tue, 04 May 2010 15:05:55 GMT</pubDate></item><item><title><![CDATA[Reply to Muss bei einer abstrakten Klasse jede Funktion überladen werden? on Tue, 04 May 2010 15:11:16 GMT]]></title><description><![CDATA[<p>Okay, danke!<br />
Wenn ich eine Funktion überlade, muss ich die dann so überladen:</p>
<pre><code class="language-cpp">class XFace : public IFace
{
public:
    virtual void Func1();
    // oder so?
    void Func1();
};
</code></pre>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1892334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1892334</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Tue, 04 May 2010 15:11:16 GMT</pubDate></item><item><title><![CDATA[Reply to Muss bei einer abstrakten Klasse jede Funktion überladen werden? on Tue, 04 May 2010 15:12:36 GMT]]></title><description><![CDATA[<p>Ist absolut identisch. Eine Funktion die einmal als virtual deklariert wurde, bleibt auch in den abgeleiteten Klassen virtual, das kannst du nicht mehr ändern.<br />
Persönlcih bevorzuge ich die erste Methode, damit klar ist, dass diese Funktion eine andere überschreibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1892335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1892335</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Tue, 04 May 2010 15:12:36 GMT</pubDate></item><item><title><![CDATA[Reply to Muss bei einer abstrakten Klasse jede Funktion überladen werden? on Tue, 04 May 2010 15:13:21 GMT]]></title><description><![CDATA[<blockquote>
<p>Muss bei einer Interfaceklasse (= abstrakte Klasse) jede Funktion überladen werden?</p>
</blockquote>
<p>Warum sollte man das tun?<br />
Eine Klasse ist abstrakt, sobald eine Funktion pure virual ist. Dabei heißt abstrakt lediglich, dass keine Instanzen dieser Klasse gebildet werden können.</p>
<p>Ob du da jetzt eine Funktion überlädst, sollte egal sein.</p>
<p>PS: Ich hoffe ich erzähle hier keinen Unsinn. Wenn dem so ist, möge man mich bitte aufklären.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1892336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1892336</guid><dc:creator><![CDATA[Abstrakt]]></dc:creator><pubDate>Tue, 04 May 2010 15:13:21 GMT</pubDate></item><item><title><![CDATA[Reply to Muss bei einer abstrakten Klasse jede Funktion überladen werden? on Tue, 04 May 2010 15:16:51 GMT]]></title><description><![CDATA[<p>Abstrakt schrieb:</p>
<blockquote>
<blockquote>
<p>Muss bei einer Interfaceklasse (= abstrakte Klasse) jede Funktion überladen werden?</p>
</blockquote>
<p>Warum sollte man das tun?<br />
Eine Klasse ist abstrakt, sobald eine Funktion pure virual ist. Dabei heißt abstrakt lediglich, dass keine Instanzen dieser Klasse gebildet werden können.</p>
<p>Ob du da jetzt eine Funktion überlädst, sollte egal sein.</p>
<p>PS: Ich hoffe ich erzähle hier keinen Unsinn. Wenn dem so ist, möge man mich bitte aufklären.</p>
</blockquote>
<p>Durch das Überladen der Funktion entfernst du diesen &quot;pure virtual&quot; Status, die Klasse ist also nicht mehr abstrakt. Darauf wollte er hinaus.</p>
<p>Eine Klasse die von diesem &quot;Interface&quot; erbt, erbt auch alle pure virtual Funktionen, ist daher auch abstrakt. Zuerst müssen alle pure virtual Funktionen überladen werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1892338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1892338</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Tue, 04 May 2010 15:16:51 GMT</pubDate></item><item><title><![CDATA[Reply to Muss bei einer abstrakten Klasse jede Funktion überladen werden? on Tue, 04 May 2010 15:21:10 GMT]]></title><description><![CDATA[<p>Merci beaucoup!</p>
<p>Eine weitere Frage, die dieses Thema betrifft:<br />
Möchte ich beispielsweise eine Klasse <code>Color</code> schreiben, die jedem zugänglich sein soll (man kann mein Programm via Addons erweitern), soll ich dann trotzdem die Definitionen in der <code>.hpp</code> belassen und die Implementation in die <code>.cpp</code> tun, oder beides in die <code>.hpp</code> ? Ich frage daher, da ich möchte, dass man nur <code>#include &quot;Color.hpp&quot;</code> machen muss, und nicht noch die <code>.cpp</code> 's einzeln zum Projekt (Beispielsweise bei VC++) hinzufügen muss, um keinen Linkerfehler zu erhalten.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1892343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1892343</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Tue, 04 May 2010 15:21:10 GMT</pubDate></item><item><title><![CDATA[Reply to Muss bei einer abstrakten Klasse jede Funktion überladen werden? on Tue, 04 May 2010 15:22:29 GMT]]></title><description><![CDATA[<p>theliquidwave schrieb:</p>
<blockquote>
<p>Merci beaucoup!</p>
<p>Eine weitere Frage, die dieses Thema betrifft:<br />
Möchte ich beispielsweise eine Klasse Color schreiben, die jedem zugänglich sein soll (man kann mein Programm via Addons erweitern), soll ich dann trotzdem die Definitionen in der <code>.hpp</code> belassen und die Implementation in die <code>.cpp</code> tun, oder beides in die <code>.hpp</code> ? Ich frage daher, da ich möchte, dass man nur <code>#include &quot;Color.hpp&quot;</code> machen muss, und nicht noch die .cpp einzeln zum Projekt (Beispielsweise bei VC++) hinzufügen muss, um keinen Linkerfehler zu erhalten.</p>
<p>Gruß</p>
</blockquote>
<p>Wenn du die Implementation deiner Klasse in einer eigenen Übersetzungseinheit hast musst du die resultierende Objektdatei auch zu den Projekten dazulinken, in denen du die Klasse benutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1892346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1892346</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 04 May 2010 15:22:29 GMT</pubDate></item><item><title><![CDATA[Reply to Muss bei einer abstrakten Klasse jede Funktion überladen werden? on Tue, 04 May 2010 15:25:20 GMT]]></title><description><![CDATA[<p>Du verwechselst gerade Definition mit Deklaration.</p>
<p>Deklaration in die Header-Datei: void Foo();<br />
Definition in die Source-Datei: void Foo() { }</p>
<p>Die Definitionen solltest du in der Source-Datei belassen, denn wenn sie in der Header-Datei stehen, kannst du diese Header-Datei nur <strong>einmal</strong> einbinden. Denn sonst brichst du die <strong>one definition rule</strong> (alles darf nur einmal definiert sein).</p>
<p>Wenn du jetzt nicht willst, dass man die Source-Datei mit in ein anderes Projekt kopieren muss, so kannst du auf Bibliotheken (Libraries) ausweichen. Dann muss das entsprechende Projekt gegen diese Bibliothek linken. Solche Bibliotheken sind je nach System unterschiedlich aufgebaut und sie sind nicht einmal unter verschiedenen Compilern kompatibel (Programm nutzt Compiler A, Bibliothek wurde mit Compiler B erstellt -&gt; Kabuff).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1892348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1892348</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Tue, 04 May 2010 15:25:20 GMT</pubDate></item><item><title><![CDATA[Reply to Muss bei einer abstrakten Klasse jede Funktion überladen werden? on Tue, 04 May 2010 15:28:00 GMT]]></title><description><![CDATA[<p>Das heißt, ich sollte die Implementation gleich mit in die .hpp packen, falls ich das so machen möchte, richtig? (Ich hoffe ich hab das richtig verstanden)</p>
<p>Edit: Ach so. Stimmt, das habe ich in der Tat verwechselt. Dann werde ich das wohl so mit der Library lösen <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>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1892349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1892349</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Tue, 04 May 2010 15:28:00 GMT</pubDate></item><item><title><![CDATA[Reply to Muss bei einer abstrakten Klasse jede Funktion überladen werden? on Tue, 04 May 2010 15:27:40 GMT]]></title><description><![CDATA[<p>Du meinst übrigens überschreiben, nicht überladen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1892350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1892350</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 04 May 2010 15:27:40 GMT</pubDate></item><item><title><![CDATA[Reply to Muss bei einer abstrakten Klasse jede Funktion überladen werden? on Tue, 04 May 2010 15:28:32 GMT]]></title><description><![CDATA[<p>Argh, was ist heute blos los mit mir.<br />
Natürlich meine ich überschreiben <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>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1892351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1892351</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Tue, 04 May 2010 15:28:32 GMT</pubDate></item><item><title><![CDATA[Reply to Muss bei einer abstrakten Klasse jede Funktion überladen werden? on Tue, 04 May 2010 15:30:36 GMT]]></title><description><![CDATA[<p>theliquidwave schrieb:</p>
<blockquote>
<p>Hallo.<br />
Muss bei einer Interfaceklasse (= abstrakte Klasse) jede Funktion überladen werden?</p>
</blockquote>
<p>Nein, Funktionsüberladung in abgeleiteten Klassen verdeckt die entsprechende Deklaration der Interfaceklase, macht die abgeleitete Klasse aber nicht nicht-abstrakt. Der korrekte Begriff hier ist Überschreiben (override).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1892352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1892352</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 04 May 2010 15:30:36 GMT</pubDate></item><item><title><![CDATA[Reply to Muss bei einer abstrakten Klasse jede Funktion überladen werden? on Tue, 04 May 2010 15:35:46 GMT]]></title><description><![CDATA[<p>Ich kenne nur einen Grund, warum man Definitionen in Header packen muss, und das sind Templates. Schreib deinen Code compilerunabhängig und kompiliere ihn in MSVC++ und GCC, dann hast du eh schon über 70% der Entwickler auf deiner Seite. Für den GCC lieferst du dann jeweils eine *.hpp und eine *.a-Datei (statische Library) bzw. eine *.so (Linux Dynamische Library) oder du machst eine *.o-Datei (Objektcodedatei), für MSVC++ machst du entweder eine *.hpp mit einer *.lib (Statische Library) oder einer *.obj (Objektcodedatei) bzw. eine *.dll (Dynamische Library für Windows) mit oder ohne *.lib...</p>
<p>Da gibt es wirklich sehr viele Möglichkeiten und viele Libraries und Softwarekomponenten werden mit verschiedenen Compilern gebaut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1892353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1892353</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Tue, 04 May 2010 15:35:46 GMT</pubDate></item><item><title><![CDATA[Reply to Muss bei einer abstrakten Klasse jede Funktion überladen werden? on Wed, 05 May 2010 23:12:54 GMT]]></title><description><![CDATA[<p>Hi.<br />
Wenn ich folgendes Interface habe:</p>
<pre><code class="language-cpp">class IFace
{
public:
    virtual void Bla(IOtherFace *pFace) = 0;
};
</code></pre>
<p>Und folgende Implementation:</p>
<pre><code class="language-cpp">class CFace : public IFace
{
public:
    virtual void Bla(COtherFace *pFace);
};
</code></pre>
<p>Ist das eine valide Überschreibung? Natürlich ist <code>COtherFace</code> als <code>class COtherFace : public IOtherFace</code> defklariert.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1893089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1893089</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Wed, 05 May 2010 23:12:54 GMT</pubDate></item><item><title><![CDATA[Reply to Muss bei einer abstrakten Klasse jede Funktion überladen werden? on Thu, 06 May 2010 16:32:09 GMT]]></title><description><![CDATA[<p>*push*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1893401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1893401</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Thu, 06 May 2010 16:32:09 GMT</pubDate></item><item><title><![CDATA[Reply to Muss bei einer abstrakten Klasse jede Funktion überladen werden? on Thu, 06 May 2010 16:35:45 GMT]]></title><description><![CDATA[<p>theliquidwave schrieb:</p>
<blockquote>
<p>Ist das eine valide Überschreibung?</p>
</blockquote>
<p>Nein. Und unterlasse das pushen (Zumal der Thread noch keinen Tag alt ist).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1893404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1893404</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 06 May 2010 16:35:45 GMT</pubDate></item></channel></rss>