<?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[Mehfach Verebung und Überladung (Funktionen gleicher Signatur)]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe das problem das ein Objekt von verschiedenen Stellen aufgerufen wird und je nach Basisklasse soll es unterschiedliches verhalten haben. Ich versuche das mal mit etwas Quelltext zu veranschaulichen.</p>
<pre><code class="language-cpp">interface A{ 
   virtual void Log(LPCTSTR szMessage) = 0;
   virtual void a() = 0;
};
interface B{ 
   virtual void Log(LPCTSTR szMessage) = 0;
   virtual void b() = 0;
};

class C : public A, public B {
public:
  void a();
  void b();
  void A::Log(LPCTSTR szMessage)  {CString sMessage = _T(&quot;A&quot;) + szMessage; CLogFile.Write(sMessage);}
  void B::Log(LPCTSTR szMessage);
private:
  CLogFile m_LogFile;
}
</code></pre>
<pre><code class="language-cpp">void C::a(){
}

void C:b(){
}

void C::B::Log(LPCTSTR szMessage){
 CString sMessage = _T(&quot;B&quot;) + szMessage;
 CLogFile.Write(sMessage);
}
</code></pre>
<p>bei Funktion B::Log gibt es vom Compiler folgenden Fehler C2509</p>
<p>Aufgerufen wird das dann im Stile</p>
<pre><code class="language-cpp">class D {
   D(A* pIf) {m_pIf = pIf; m_pIf-&gt;Log(_T(&quot;Test D1&quot;));}
   void FunktionA() {m_pIf-&gt;Log(_T(&quot;Test D2&quot;));}
   virtual ~D(){m_pIf-&gt;Log(_T(&quot;Test D3&quot;));}
}

class E {
   E(B* pIf) {m_pIf = pIf; m_pIf-&gt;Log(_T(&quot;Test E1&quot;));}
   void FunktionA() {m_pIf-&gt;Log(_T(&quot;Test E2&quot;));}
   virtual ~E(){m_pIf-&gt;Log(_T(&quot;Test E3&quot;));}
}
</code></pre>
<p>Ich denke ich habe dabei strukturell was falsch gemacht. Ich hoffe ich bekomme von Euch Tipps wie ich das auflösen kann.</p>
<p>Vielen Dank schon mal im Voraus.</p>
<p>Klaus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/301838/mehfach-verebung-und-überladung-funktionen-gleicher-signatur</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 17:29:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301838.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Apr 2012 17:53:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mehfach Verebung und Überladung (Funktionen gleicher Signatur) on Wed, 04 Apr 2012 17:53:25 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe das problem das ein Objekt von verschiedenen Stellen aufgerufen wird und je nach Basisklasse soll es unterschiedliches verhalten haben. Ich versuche das mal mit etwas Quelltext zu veranschaulichen.</p>
<pre><code class="language-cpp">interface A{ 
   virtual void Log(LPCTSTR szMessage) = 0;
   virtual void a() = 0;
};
interface B{ 
   virtual void Log(LPCTSTR szMessage) = 0;
   virtual void b() = 0;
};

class C : public A, public B {
public:
  void a();
  void b();
  void A::Log(LPCTSTR szMessage)  {CString sMessage = _T(&quot;A&quot;) + szMessage; CLogFile.Write(sMessage);}
  void B::Log(LPCTSTR szMessage);
private:
  CLogFile m_LogFile;
}
</code></pre>
<pre><code class="language-cpp">void C::a(){
}

void C:b(){
}

void C::B::Log(LPCTSTR szMessage){
 CString sMessage = _T(&quot;B&quot;) + szMessage;
 CLogFile.Write(sMessage);
}
</code></pre>
<p>bei Funktion B::Log gibt es vom Compiler folgenden Fehler C2509</p>
<p>Aufgerufen wird das dann im Stile</p>
<pre><code class="language-cpp">class D {
   D(A* pIf) {m_pIf = pIf; m_pIf-&gt;Log(_T(&quot;Test D1&quot;));}
   void FunktionA() {m_pIf-&gt;Log(_T(&quot;Test D2&quot;));}
   virtual ~D(){m_pIf-&gt;Log(_T(&quot;Test D3&quot;));}
}

class E {
   E(B* pIf) {m_pIf = pIf; m_pIf-&gt;Log(_T(&quot;Test E1&quot;));}
   void FunktionA() {m_pIf-&gt;Log(_T(&quot;Test E2&quot;));}
   virtual ~E(){m_pIf-&gt;Log(_T(&quot;Test E3&quot;));}
}
</code></pre>
<p>Ich denke ich habe dabei strukturell was falsch gemacht. Ich hoffe ich bekomme von Euch Tipps wie ich das auflösen kann.</p>
<p>Vielen Dank schon mal im Voraus.</p>
<p>Klaus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198798</guid><dc:creator><![CDATA[Klaus-Peter Weiß]]></dc:creator><pubDate>Wed, 04 Apr 2012 17:53:25 GMT</pubDate></item><item><title><![CDATA[Reply to Mehfach Verebung und Überladung (Funktionen gleicher Signatur) on Wed, 04 Apr 2012 18:30:27 GMT]]></title><description><![CDATA[<p>Welche Sprache ist das da? Das Schlüsselwort <code>interface</code> gibt es in C++ nicht. Außerdem sollte <code>A::log</code> auch von keinem C++-Compiler gefressen werden.</p>
<p>Ganz davon abgesehen, finde ich das, was du vorhast, ziemlich fraglich. Warum sollte sich ein Objekt abhängig davon verhalten, unter welchem Namen ich es anspreche? Das widerspricht dem Konzept von dynamischen Typen. Du könntest das zwar implementieren, indem du das Verhalten über den statischen statt den dynamischen Typen regelst, aber den Sinn sehe ich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198816</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 04 Apr 2012 18:30:27 GMT</pubDate></item><item><title><![CDATA[Reply to Mehfach Verebung und Überladung (Funktionen gleicher Signatur) on Wed, 04 Apr 2012 18:45:36 GMT]]></title><description><![CDATA[<p>Vielleicht mit einer (Zwischen-)Klasse:</p>
<pre><code class="language-cpp">class A1 : public A{
	void Log(LPCTSTR s) { return LogA(s); }
public:
	virtual void LogA(LPCTSTR) = 0;
};

class B1 : public B{
	void Log(LPCTSTR s)  { return LogB(s); }
public:
	virtual void LogB(LPCTSTR) = 0;
};

class C : public A1, public B1{
	void LogA(LPCTSTR s) { /* Implementierung */ }
	void LogB(LPCTSTR s) { /* Implementierung */ }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2198822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198822</guid><dc:creator><![CDATA[Gelangweilt am abend]]></dc:creator><pubDate>Wed, 04 Apr 2012 18:45:36 GMT</pubDate></item><item><title><![CDATA[Reply to Mehfach Verebung und Überladung (Funktionen gleicher Signatur) on Wed, 04 Apr 2012 20:32:48 GMT]]></title><description><![CDATA[<p>das ist C++ in der Microsoftschen Ausführung ...</p>
<p>interface scheint auch nur ein anderes Wort für struct zu sein.</p>
<p>wie ist das gemeint über die statischen Typen regeln?</p>
<p>Danke für den Tipp mit der Zwischenklasse.</p>
<p>Ich habe noch nicht verstanden was der Compiler gegen die Implementierung von B::Log hat. A::Log direkt in der Klassendeklaration frisst er doch auch.</p>
<p>wewnn beide Log's in der Klassendeklaration implementiert werden läuft alles durch und auch das Verhalten ist wie gewünscht.</p>
<p>Ich hoffe ich kann noch erleuchtet werden.</p>
<p>Klaus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198848</guid><dc:creator><![CDATA[Klaus-Peter Weiß]]></dc:creator><pubDate>Wed, 04 Apr 2012 20:32:48 GMT</pubDate></item><item><title><![CDATA[Reply to Mehfach Verebung und Überladung (Funktionen gleicher Signatur) on Wed, 04 Apr 2012 21:05:34 GMT]]></title><description><![CDATA[<p>Klaus-Peter Weiß schrieb:</p>
<blockquote>
<p>das ist C++ in der Microsoftschen Ausführung ...</p>
<p>interface scheint auch nur ein anderes Wort für struct zu sein.</p>
</blockquote>
<p>Das ist einfach ein #define in den Windows Header Files, der MSVC kennt &quot;interface&quot; nicht selbst als Keyword.</p>
<blockquote>
<p>Ich habe noch nicht verstanden was der Compiler gegen die Implementierung von B::Log hat. A::Log direkt in der Klassendeklaration frisst er doch auch.</p>
</blockquote>
<p>Die ganze A::Log/B::Log Geschichte ist eine non-Standard Erweiterung im MSVC.</p>
<p><a href="http://msdn.microsoft.com/en-us/library/ksek8777.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ksek8777.aspx</a></p>
<blockquote>
<p>wewnn beide Log's in der Klassendeklaration implementiert werden läuft alles durch und auch das Verhalten ist wie gewünscht.</p>
</blockquote>
<p>Möglicherweise gibt es hier eine nicht-dokumentierte Einschränkung, dass Funktionen mit gleicher Signatur entweder alle inline Definiert werden müssen, oder alle ausserhalb der Klasse.</p>
<p>Auf jeden Fall bist du mit der Frage hier falsch, da wie gesagt MS-spezifische Extension. Das passende Forum wäre &quot;MFC (Visual C++)&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198856</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 04 Apr 2012 21:05:34 GMT</pubDate></item><item><title><![CDATA[Reply to Mehfach Verebung und Überladung (Funktionen gleicher Signatur) on Thu, 05 Apr 2012 04:24:18 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Auf jeden Fall bist du mit der Frage hier falsch, da wie gesagt MS-spezifische Extension. Das passende Forum wäre &quot;MFC (Visual C++)&quot;.</p>
</blockquote>
<p>Ich glaube er sollte einfach mal sagen, was er wirklich vor hat, dass bekommt man sicher auch ohne MS-spezifische Extensions hin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198883</guid><dc:creator><![CDATA[hgjdhgjdf]]></dc:creator><pubDate>Thu, 05 Apr 2012 04:24:18 GMT</pubDate></item><item><title><![CDATA[Reply to Mehfach Verebung und Überladung (Funktionen gleicher Signatur) on Thu, 05 Apr 2012 07:54:25 GMT]]></title><description><![CDATA[<p>Hallo noch mal.</p>
<p>Ich möchte ein Programmweites Logging verschiedener Klassen realisieren, wobei jede Klasse noch noch verschiedene andere globale Funktionen benötigt.</p>
<p>Bei nochmaligem Nachdenken ist der Ansatz den ich verfolgt habe wirklich nicht sinnvoll ist. Es sollen im Logfile auch Instanzen einer Klasse zu unterscheiden sein, was ja auf die Weise auch nicht geht.</p>
<p>Danke für die Unterstützung und die guten Denkanstösse. Ohne die Ich wohl nicht auf die Lösung gekommen wäre.</p>
<p>Klaus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198916</guid><dc:creator><![CDATA[Klaus-Peter Weiß]]></dc:creator><pubDate>Thu, 05 Apr 2012 07:54:25 GMT</pubDate></item></channel></rss>