Hallo.
Ich habe mir gerade mal die virtual methoden angeshene, wobei dabei eigentlch alles verstanden habe.
Jetzt verstehe ich bei virtullen destruktoren aber etwas nicht wirklich.
Aber zuerst mal der Code:
So, normalerweise, wenn ich das "virtual" in der Basisklasse am "Destructor" entferne, wird beim löschen nur der "Destruktor" von der Basisklasse ausgeführt.(Ist ja auch logsich)
Wenn ich den "Destructor" "virtual" mache wird auch der "Destructor" von der Abgeleiteten Klasse ausgeführt.
Und dass wundert mich, da ich ja den "Destructor" ja in der abgeleitet Klasse komplett überschrieben werden sollte, aber hier wird
das ja einfach nur "drangehangen".
Wenn ich das selbe nämlichen mit functionen mache, wird die function in der abgeleiteten klasse a komplett überschireben, in dem beispielfunction im obrigen code wird z.B. ja dann nur 2 ausgeben.
Kann mir jemand sagen, warum sich ein virtual Destructor anders verhält, als eine virtual Methode?
Ich habe mir gerade mal die virtual methoden angeshene, wobei dabei eigentlch alles verstanden habe.
Jetzt verstehe ich bei virtullen destruktoren aber etwas nicht wirklich.
Aber zuerst mal der Code:
Code:
class BasisKlasse
{
public:
virtual void function(void)
{
cout<<"1"<<endl;
}
BasisKlasse()
{
cout<<"Konstruktor BasisKlasse"<<endl;
}
virtual ~BasisKlasse()
{
cout<<"Destruktor BasisKlasse"<<endl;
}
};
Code:
class AbgeleiteteKlasse : public BasisKlasse
{
public:
virtual void function(void)
{
cout<<"2"<<endl;
}
AbgeleiteteKlasse()
{
cout<<"Konstruktor AbgeleiteteKlasse"<<endl;
}
virtual ~AbgeleiteteKlasse()
{
cout<<"Destruktor AbgeleiteteKlasse"<<endl;
}
};
Code:
int main(void)
{
BasisKlasse *b = new AbgeleiteteKlasse();
b->function();
_getch();
delete b;
_getch();
return 0;
}
So, normalerweise, wenn ich das "virtual" in der Basisklasse am "Destructor" entferne, wird beim löschen nur der "Destruktor" von der Basisklasse ausgeführt.(Ist ja auch logsich)
Wenn ich den "Destructor" "virtual" mache wird auch der "Destructor" von der Abgeleiteten Klasse ausgeführt.
Und dass wundert mich, da ich ja den "Destructor" ja in der abgeleitet Klasse komplett überschrieben werden sollte, aber hier wird
das ja einfach nur "drangehangen".
Wenn ich das selbe nämlichen mit functionen mache, wird die function in der abgeleiteten klasse a komplett überschireben, in dem beispielfunction im obrigen code wird z.B. ja dann nur 2 ausgeben.
Kann mir jemand sagen, warum sich ein virtual Destructor anders verhält, als eine virtual Methode?