Genau - ich brauchte nur einen simplen Standardkonstruktor und nach kurzer Zeit wurde mir das auch wieder bewusst. Ich habe nur theoretisch und bedingt mit Klassen gearbeitet und nun zeigt sich der Vorteil dieser nunmal vorallem bei größeren Programmen. Was ich da noch im Kopf hatte ist, wie bereits erwähnt Heiko Kalistas Aussage:
Ja es funktioniert wenn die Basis Klasse einen Standard Konstruktor hat, aber dem entnehme ich das du die Hinweise hier nicht ganz/wirklich verstanden hast.
Wenn die Basisklasse keinen Standard Konstuktor hat, hat das in der Regel einen Grund, meist der das beim Aufruf des Objektes es auch Initialisiert sein soll.
Genau so ist es wenn du den Konstruktor der Basis Klasse über den Konstruktor der Kind Klasse aufrufst, die Basis Klasse soll damit initialisert werden. Anderfalls müssen alle Parameter umständlich über eventuelle set-Methoden gesetzt werden.
nochmal ein Kleines Beispiel um die Sache zu verdeutlichen (im Prinzip identisch zu H5:: seinem Code).
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
// ElterKlasse.hpp
class ElternKlasse
{
private:
int m_parameter;
public:
ElternKlasse(int paramater);
};
// ElternKlasse.cpp
ElternKlasse::ElternKlasse(int paramater) : // Initialisierungsliste
m_parameter(parameter)
{
// Klasse ist initialisert
}
// KindKlasse.hpp
class KindKlasse : public Elternklasse
{
private:
int m_parameter2;
public:
KindKlasse(int parameter, int parameter2);
};
//KindKlasse.cpp
KindKlasse::KindKlasse(int parameter, int parameter2) : // Initialisierungsliste
ElternKlasse(parameter), // Elternklasse Initialisieren
m_parameter2(parameter2)
{
// Klasse ist initialisert (auch die ElternKlasse ohne Standard Konstruktor)
}
|
Durch die Verwendung des Schlüsselwortes virtual direkt bei der
Deklaration einer Memberfunktion gibt man an, dass damit zu rechnen ist,
dass eine abgeleitete Klasse diese Funktion überschreiben wird.
Übrigens der Kostruktor ist keine Memberfunktion.