<?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 beim aufruf virtueller Methoden]]></title><description><![CDATA[<p><strong>[EDIT]<br />
(Schaut gleich nach ganz unten der meiste Teil war im C++ Forum)</strong><br />
Ich schreib gerade an zwei Klassen:<br />
Eine Klasse BaseClass und eine davon abgeleitete Klasse Ableitung.</p>
<pre><code class="language-cpp">//BaseClass.h:
class BaseClass  
{
public:
	void StartCall();
	BaseClass();
	virtual ~BaseClass();

protected:
	void TheCall();
};

//BaseClass.cpp
void BaseClass::StartCall()
{
	TheCall();
}

void BaseClass::TheCall()
{
	cout &lt;&lt;&quot;BaseClass NEIIIIIIIIIN&quot; &lt;&lt;endl; :rage: 
}
</code></pre>
<p>So, wenn jetzt StartCall() aufgerufen wird dann soll TheCall aufgerufen werden.<br />
Jetzt will ich aber in meiner Ableitung, dass dann anstatt der Methode die überschriebene TheCall() aufgerufen wird.<br />
<strong>StartCall() soll aber nicht überschrieben werden !!!</strong> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Was tun ?</p>
<pre><code class="language-cpp">//Ableitung.h
#include &quot;BaseClass.h&quot;

class Ableitung : public BaseClass 
{
public:

	Ableitung();
	virtual ~Ableitung();

protected:	
	void TheCall();

};

//Ableitung.cpp
void Ableitung::TheCall()
{
	cout &lt;&lt;&quot;Ableitung !!!!! JUHUUUU!&quot; &lt;&lt;endl; :D 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/72115/problem-beim-aufruf-virtueller-methoden</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 09:57:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/72115.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 25 Apr 2004 14:03:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem beim aufruf virtueller Methoden on Sun, 25 Apr 2004 15:04:42 GMT]]></title><description><![CDATA[<p><strong>[EDIT]<br />
(Schaut gleich nach ganz unten der meiste Teil war im C++ Forum)</strong><br />
Ich schreib gerade an zwei Klassen:<br />
Eine Klasse BaseClass und eine davon abgeleitete Klasse Ableitung.</p>
<pre><code class="language-cpp">//BaseClass.h:
class BaseClass  
{
public:
	void StartCall();
	BaseClass();
	virtual ~BaseClass();

protected:
	void TheCall();
};

//BaseClass.cpp
void BaseClass::StartCall()
{
	TheCall();
}

void BaseClass::TheCall()
{
	cout &lt;&lt;&quot;BaseClass NEIIIIIIIIIN&quot; &lt;&lt;endl; :rage: 
}
</code></pre>
<p>So, wenn jetzt StartCall() aufgerufen wird dann soll TheCall aufgerufen werden.<br />
Jetzt will ich aber in meiner Ableitung, dass dann anstatt der Methode die überschriebene TheCall() aufgerufen wird.<br />
<strong>StartCall() soll aber nicht überschrieben werden !!!</strong> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Was tun ?</p>
<pre><code class="language-cpp">//Ableitung.h
#include &quot;BaseClass.h&quot;

class Ableitung : public BaseClass 
{
public:

	Ableitung();
	virtual ~Ableitung();

protected:	
	void TheCall();

};

//Ableitung.cpp
void Ableitung::TheCall()
{
	cout &lt;&lt;&quot;Ableitung !!!!! JUHUUUU!&quot; &lt;&lt;endl; :D 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/508445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/508445</guid><dc:creator><![CDATA[XCooperation]]></dc:creator><pubDate>Sun, 25 Apr 2004 15:04:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim aufruf virtueller Methoden on Sun, 25 Apr 2004 14:15:05 GMT]]></title><description><![CDATA[<p>baseclass.h:</p>
<pre><code class="language-cpp">class BaseClass  
{
public:
    void StartCall();
    BaseClass();
    virtual ~BaseClass();

protected:
    virtual void TheCall(); //hier
};
</code></pre>
<p>mehr: <a href="http://tutorial.schornboeck.net/virtual.htm" rel="nofollow">http://tutorial.schornboeck.net/virtual.htm</a><br />
du solltest dir eventuell auch dein lieblingsc++buch zur hand nehmen und das kapitel über polymorphie und virtuelle funktionen noch einmal durchlesen <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/508452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/508452</guid><dc:creator><![CDATA[davie]]></dc:creator><pubDate>Sun, 25 Apr 2004 14:15:05 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim aufruf virtueller Methoden on Sun, 25 Apr 2004 14:16:30 GMT]]></title><description><![CDATA[<p>Teste mal das:</p>
<pre><code class="language-cpp">//BaseClass.h:

class BaseClass  
{
public:
    virtual void StartCall();
    BaseClass();
    virtual ~BaseClass();

protected:
    virtual void TheCall();
};

//BaseClass.cpp
void BaseClass::StartCall()
{
    TheCall();
}

void BaseClass::TheCall()
{
    cout &lt;&lt;&quot;BaseClass NEIIIIIIIIIN&quot; &lt;&lt;endl;  
}
//Ableitung.h
#include &quot;BaseClass.h&quot;

class Ableitung : public BaseClass 
{
public:

    Ableitung();
    virtual ~Ableitung();

protected:    
    virtual void TheCall();

};

//Ableitung.cpp
void Ableitung::TheCall()
{
    cout &lt;&lt;&quot;Ableitung !!!!! JUHUUUU!&quot; &lt;&lt;endl;  
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/508454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/508454</guid><dc:creator><![CDATA[Drückeberger]]></dc:creator><pubDate>Sun, 25 Apr 2004 14:16:30 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim aufruf virtueller Methoden on Sun, 25 Apr 2004 14:26:27 GMT]]></title><description><![CDATA[<p>Ich kann leider kein virtual hernehmen.<br />
Es ist ein MFC Projekt und irgendwie gibts da die Meldung:</p>
<p>Warning: calling DestroyWindow in CDialog::~CDialog --<br />
OnDestroy or PostNcDestroy in derived class will not be called.</p>
<p>Und irgendeine Adresse auf dem Heap findet er net (nehme an is die VMT)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/508459</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/508459</guid><dc:creator><![CDATA[XCooperation]]></dc:creator><pubDate>Sun, 25 Apr 2004 14:26:27 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim aufruf virtueller Methoden on Sun, 25 Apr 2004 14:28:27 GMT]]></title><description><![CDATA[<p>ich nehme an die leute im mfc forum können dir dann besser helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/508460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/508460</guid><dc:creator><![CDATA[davie]]></dc:creator><pubDate>Sun, 25 Apr 2004 14:28:27 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim aufruf virtueller Methoden on Sun, 25 Apr 2004 14:28:42 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=5608" rel="nofollow">davie</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=15" rel="nofollow">C++</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=1" rel="nofollow">MFC mit dem Visual C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/508461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/508461</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Sun, 25 Apr 2004 14:28:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim aufruf virtueller Methoden on Sun, 25 Apr 2004 14:51:53 GMT]]></title><description><![CDATA[<p>Ich wollte ein Klasse schreiben, die ein Trayicon einer Anwendung verwaltet</p>
<p>So sieht meine Klasse aus (könnt ihr unter <a href="http://mitglied.lycos.de/xcooperation/download" rel="nofollow">http://mitglied.lycos.de/xcooperation/download</a>-&gt;trayicon.zip downloaden):</p>
<pre><code class="language-cpp">//Trayicon.h
#define WM_TRAYICON WM_USER + 1
#define ON_WM_TRAYICON ON_MESSAGE(WM_TRAYICON, OnTrayMesseage)
class CTrayIcon  
{
    //Funktionen zum anzeigen etc.
protected:
	afx_msg LRESULT OnTrayMesseage(WPARAM wParam, LPARAM lParam); //Wird  aufgerufen wenn ON_WM_TRAYICON eintritt

	virtual void OnTIMouseMove(CPoint pt);// Kann man überschreiben
	virtual void OnTIRButtonDown(CPoint pt);
	virtual void OnTILButtonDown(CPoint pt);
	virtual void OnTIOtherMSG(UINT msg,CPoint pt);
};

//Funktion, die von ON_WM_TRAYICON aufgerufen wird:
LRESULT CTrayIcon::OnTrayMesseage(WPARAM wParam,LPARAM lParam)
{
	CPoint cursor;
	GetCursorPos(&amp;cursor);
	if(wParam != trayicon.uID)
		return 0;

	switch(lParam)//Je nach Code soll die entsprechende Funktion in der abgeleiteten Klasse aufegerufen werden
	{
	case WM_MOUSEMOVE:
		OnTIMouseMove(cursor);break;// :rage: beim aufruf Fehler HEAP irgendetwas nich gefunden ungültige adresse (VMT ???) Wenn ich virtual weglasse funktionierts nur ruft er dann die Methode der Basisklasse auf. Seufz!
	case WM_LBUTTONDOWN:
		OnTILButtonDown(cursor);break;
	case WM_RBUTTONDOWN:
		OnTIRButtonDown(cursor);break;
	default:
		OnTIOtherMSG(lParam,cursor);
	}

	return 0;
}
//Die OnTI Funtkionen habe ich alle mit leerer Zeile definiert
</code></pre>
<p>Einfügen tu ich die Klasse in dem ich z.B. einen Dialog davon ableite:<br />
CMyDialog : public CDialog , public CTrayIcon</p>
<p>So und jetzt kann man in die MessageMap ON_WM_TRAYICON eintragen</p>
<pre><code class="language-cpp">BEGIN_MESSAGE_MAP(CSomeTestsDlg, CDialog)
	//{{AFX_MSG_MAP(CSomeTestsDlg)
	ON_WM_PAINT()
	ON_WM_RBUTTONDOWN()
	//}}AFX_MSG_MAP
	ON_WM_TRAYICON
END_MESSAGE_MAP()
</code></pre>
<p>Und dann muss man nur noch die Methoden überschreiben auf die man reagieren will z.B. OnTILButtonDown<br />
Aber dort oben gibts leider immer nen Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/508470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/508470</guid><dc:creator><![CDATA[XCooperation]]></dc:creator><pubDate>Sun, 25 Apr 2004 14:51:53 GMT</pubDate></item></channel></rss>