Wird ein Objekt einer abgeleiteten Klasse erzeugt, wird implizit auch (je) eines der Basisklasse(n) kreiert
der Konstruktor der Basisklasse muß
aufgerufen werden.
class uhr
{ int std;
int min;
public:
uhr(int s, int m) : std(s), min(m) {};
uhr() : std(0), min(0) {};
void show() { cout << std << ':' << min;}
};
class wecker : public uhr
{ int alarm_std;
int alarm_min;
public:
wecker() : alarm_std(0), alarm_min(0) {}
wecker(int s, int m, int as, int am)
: uhr(s,m),
alarm_std(as),
alarm_min(am) {}
void show() { uhr::show();
cout << " || "
<< alarm_std << ':'
<< alarm_min;
}
};
Die Reihenfolge der Konstruktoraufrufe für Basisklassen bzw. Elemente bestimmt sich aus der Reihenfolge der Deklaration (nicht aus der Anordnung der Liste)!
Reihenfolge der Destruktion umgekehrt
Nicht erlaubt sind
Eine Klasse kann sowohl Basisklasse als auch Elementklasse sein:
// Besserer Wecker
class wecker : public uhr
{ uhr alarmzeit;
public:
wecker() : alarmzeit(0,0) {}
wecker(int s, int m, int as, int am)
: uhr(s,m),
alarmzeit(as,am) {}
void show() { uhr::show();
cout << " || ";
alarmzeit.show();
}
};
Wird ein Objekt einer abgeleiteten Klasse durch Kopie initialisiert
wecker w1(11,30,7,15);
wecker w2 = w1;
lassen sich vier Fälle unterscheiden:
uhr(const uhr& ori) : std(ori.std),
min(ori.min) {}
wecker(const wecker & ori)
: uhr(ori),
alarmzeit(ori.alarmzeit) {}