Ich hab da ein Verständisproblem (oder ein Compilerproblem) mit virtuellen Funktionen.
Unteres Beispiel definiert 2 Klassen mit einer virtuellen Methode SetString. Diese setzt jeweils den Member m_Text mit einem festen Text.
Im Konstruktor der Basisklasse wird diese virtuelle Methode aufgerufen um m_Text zu Initialisieren.
Ich würde erwarten das das Beispielprogramm die Ausgabe:
KlasseAbleitung<br>
KlasseAbleitung<br>
Taste
liefern würde.
Jedoch bekomme ich (Mit Visual C++6.0 mit SP)
KlasseBasis<br>
KlasseAbleitung<br>
Taste
D.h. im Konstruktor der Basisklasse sind die überladenen Funktionen scheinbar noch nicht vorhanden (C++-Definition). Ist dies so definiert oder evtl. nur ein Bug vom Visual Studio?
Danke für Erklärungen
Bernhard
<pre>
#include "stdafx.h"
#include "string.h"
#include "conio.h"
class KlasseBasis
{
public:
char m_Text[500];
KlasseBasis();
virtual void SetString();
};
KlasseBasis::KlasseBasis()
{
SetString();
}
void KlasseBasis::SetString()
{
strcpy( m_Text, "KlasseBasis");
}
class KlasseAbleitung: public KlasseBasis
{
public:
virtual void SetString();
};
void KlasseAbleitung::SetString()
{
strcpy( m_Text, "KlasseAbleitung");
}
int main(int argc, char* argv[])
{
KlasseBasis* Klasse = new KlasseAbleitung;
printf(Klasse->m_Text);
printf("\n");
Klasse->SetString();
printf(Klasse->m_Text);
printf("\n");
printf("Taste");
getch();
return 0;
}
</pre>
Unteres Beispiel definiert 2 Klassen mit einer virtuellen Methode SetString. Diese setzt jeweils den Member m_Text mit einem festen Text.
Im Konstruktor der Basisklasse wird diese virtuelle Methode aufgerufen um m_Text zu Initialisieren.
Ich würde erwarten das das Beispielprogramm die Ausgabe:
KlasseAbleitung<br>
KlasseAbleitung<br>
Taste
liefern würde.
Jedoch bekomme ich (Mit Visual C++6.0 mit SP)
KlasseBasis<br>
KlasseAbleitung<br>
Taste
D.h. im Konstruktor der Basisklasse sind die überladenen Funktionen scheinbar noch nicht vorhanden (C++-Definition). Ist dies so definiert oder evtl. nur ein Bug vom Visual Studio?
Danke für Erklärungen
Bernhard
<pre>
#include "stdafx.h"
#include "string.h"
#include "conio.h"
class KlasseBasis
{
public:
char m_Text[500];
KlasseBasis();
virtual void SetString();
};
KlasseBasis::KlasseBasis()
{
SetString();
}
void KlasseBasis::SetString()
{
strcpy( m_Text, "KlasseBasis");
}
class KlasseAbleitung: public KlasseBasis
{
public:
virtual void SetString();
};
void KlasseAbleitung::SetString()
{
strcpy( m_Text, "KlasseAbleitung");
}
int main(int argc, char* argv[])
{
KlasseBasis* Klasse = new KlasseAbleitung;
printf(Klasse->m_Text);
printf("\n");
Klasse->SetString();
printf(Klasse->m_Text);
printf("\n");
printf("Taste");
getch();
return 0;
}
</pre>
Comment