<?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[Problem mit Polymorphie]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein kleines Problem mit der Polymorphie in C++. In meinem Beispiel habe ich eine Elternklasse B mit zwei Funktionen selben Namens, aber mit unterschiedlicher Signatur.<br />
Sobald ich in der abgeleiteten Klasse nur eine der Beiden überschreiben will, gibt es einen Compiler-Fehler.</p>
<pre><code class="language-cpp">class B{
        public:
                virtual void s() {}
                virtual void s(int){};
};

class C : public B {
        public:
                virtual void s(int){}; // without this line it compiles!
};

int main() {
        C c;
        c.s();
};
</code></pre>
<p><a href="http://main.cc" rel="nofollow">main.cc</a>: In function 'int main()':<br />
<a href="http://main.cc:16" rel="nofollow">main.cc:16</a>: error: no matching function for call to 'C::s()'<br />
<a href="http://main.cc:11" rel="nofollow">main.cc:11</a>: note: candidates are: virtual void C::s(int)</p>
<p>Ich bin mir nicht sicher, ob dies nun ein generelles C++ Problem ist, und ob es dafür eine Lösung gibt, oder ob es vom Compiler abhängt (gcc version 4.0.1 (Apple Inc. build 5465))<br />
Über Hilfe mit meinem Problem würde ich mich sehr freuen.</p>
<p>Vielen Dank!</p>
<p>Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/256819/problem-mit-polymorphie</link><generator>RSS for Node</generator><lastBuildDate>Thu, 10 Sep 2026 23:16:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/256819.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Dec 2009 11:51:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Polymorphie on Fri, 18 Dec 2009 12:10:03 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein kleines Problem mit der Polymorphie in C++. In meinem Beispiel habe ich eine Elternklasse B mit zwei Funktionen selben Namens, aber mit unterschiedlicher Signatur.<br />
Sobald ich in der abgeleiteten Klasse nur eine der Beiden überschreiben will, gibt es einen Compiler-Fehler.</p>
<pre><code class="language-cpp">class B{
        public:
                virtual void s() {}
                virtual void s(int){};
};

class C : public B {
        public:
                virtual void s(int){}; // without this line it compiles!
};

int main() {
        C c;
        c.s();
};
</code></pre>
<p><a href="http://main.cc" rel="nofollow">main.cc</a>: In function 'int main()':<br />
<a href="http://main.cc:16" rel="nofollow">main.cc:16</a>: error: no matching function for call to 'C::s()'<br />
<a href="http://main.cc:11" rel="nofollow">main.cc:11</a>: note: candidates are: virtual void C::s(int)</p>
<p>Ich bin mir nicht sicher, ob dies nun ein generelles C++ Problem ist, und ob es dafür eine Lösung gibt, oder ob es vom Compiler abhängt (gcc version 4.0.1 (Apple Inc. build 5465))<br />
Über Hilfe mit meinem Problem würde ich mich sehr freuen.</p>
<p>Vielen Dank!</p>
<p>Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824402</guid><dc:creator><![CDATA[StefanUl]]></dc:creator><pubDate>Fri, 18 Dec 2009 12:10:03 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Polymorphie on Fri, 18 Dec 2009 12:03:50 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<blockquote>
<p>Ich bin mir nicht sicher, ob dies nun ein generelles C++ Problem ist,</p>
</blockquote>
<p>Ja, ist es.</p>
<blockquote>
<p>und ob es dafür eine Lösung gibt</p>
</blockquote>
<p>Die s-Funktionen nicht virtual machen, dafür aber in s eine virtuelle Funktion mit fester Signatur aufrufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824408</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Fri, 18 Dec 2009 12:03:50 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Polymorphie on Fri, 18 Dec 2009 12:43:24 GMT]]></title><description><![CDATA[<p>Sobald in einer abgeleiteten Klasse eine Memberfunktion neu deklariert wird – ob virtuell oder nicht, spielt keine Rolle – <em>verdeckt</em> sie die anderen Funktionen gleichen Namens, die in einer Basisklasse deklariert wurden. Um dieses Problem zu umgehen, kannst du das Schlüsselwort <code>using</code> einsetzen:</p>
<pre><code class="language-cpp">class C : public B
{
    public:
        using B::s;
        virtual void s(int);
};
</code></pre>
<p>Jockelx schrieb:</p>
<blockquote>
<p>Die s-Funktionen nicht virtual machen, dafür aber in s eine virtuelle Funktion mit fester Signatur aufrufen.</p>
</blockquote>
<p>Mit <code>virtual</code> hat das in erster Linie wie erwähnt nichts zu tun. Das Problem hat StefanUI weiterhin, falls er eine Funktion erst in einer abgeleiteten Klasse überladen möchte. Deshalb <code>using</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824421</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 18 Dec 2009 12:43:24 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Polymorphie on Fri, 18 Dec 2009 12:47:37 GMT]]></title><description><![CDATA[<p>Versuch mal:</p>
<pre><code class="language-cpp">class B{
        public:
                virtual void s() {}
                virtual void s(int){}
};

class C : public B {
        public:
                using B::s;
                virtual void s(int){}
};

int main() {
        C c;
        c.s();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1824425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824425</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 18 Dec 2009 12:47:37 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Polymorphie on Fri, 18 Dec 2009 13:21:55 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Jockelx schrieb:</p>
<blockquote>
<p>Die s-Funktionen nicht virtual machen, dafür aber in s eine virtuelle Funktion mit fester Signatur aufrufen.</p>
</blockquote>
<p>Mit <code>virtual</code> hat das in erster Linie wie erwähnt nichts zu tun. Das Problem hat StefanUI weiterhin, falls er eine Funktion erst in einer abgeleiteten Klasse überladen möchte. Deshalb <code>using</code> .</p>
</blockquote>
<p>Ich hab nicht gesagt, dass es am virtual liegt, sondern ich hab ein workaround angeboten, nämlich sowas:</p>
<pre><code class="language-cpp">class B{
        public:
                void s() {do_s(0);}
                void s(int i){do_s(i);};
        private:
                virtual void do_s(int){};
};

class C : public B {
        private:
                virtual void do_s(int){};
};
</code></pre>
<p>Aber stimmt natürlich, dass die using-Variante die war, die er wohl hören wollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824454</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Fri, 18 Dec 2009 13:21:55 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Polymorphie on Fri, 18 Dec 2009 18:32:02 GMT]]></title><description><![CDATA[<p>Jockelx schrieb:</p>
<blockquote>
<p>Ich hab nicht gesagt, dass es am virtual liegt, sondern ich hab ein workaround angeboten..</p>
</blockquote>
<p>Ich würde das als mehr als ein 'workaround' bezeichnen. Das NVI (non virtual interface idiom) ist meist oder oft auch aus anderen Gründen die richtige Lösung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824629</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Fri, 18 Dec 2009 18:32:02 GMT</pubDate></item></channel></rss>