Wie im vorherigen Abschnitt kann der Destruktor in einer abgeleiteten Klasse nicht von der abgeleiteten Klasse absorbiert werden.
Der entscheidende Punkt ist, dass sich jeder über die Aufrufreihenfolge der Destruktoren abgeleiteter Klassen und Basisklassen im Klaren sein muss. Die Aufrufreihenfolge der Destruktoren ist der der Konstruktoren völlig entgegengesetzt. Wir können eine Nachricht im abgeleiteten Klassendestruktor und im Basisklassendestruktor ausgeben und beachten Sie die Aufrufreihenfolge:
/****************************************//Des: C++-Tutorial-Demo//Autor: Huang/ /Copyright:www.dotcpp.com//Datum:15.11.2017********************************* * *******/#include<iostream>usingnamespacestd;classClock{private:intH;intM;intS;public:Clock(){cout<<Clock'sConstructorCalled!<<endl;}~Clock(){cout < <Clock'sDestructorCalled!<<endl;}};classAlarmClock:publicClock{private:intAH;intAM;public:AlarmClock(){cout<<AlarmClock'sConstructorCalled!<<endl;}~AlarmClock(){cout<<AlarmClock ' sDestructorCalled!<<endl;}};intmain(){AlarmClockA;return0;}
Lauf-Screenshot:
Wie Sie sehen, wird beim Definieren einer abgeleiteten Klasse „AlarmClock“ zuerst die Basisklasse generiert, während die Zerstörungsreihenfolge umgekehrt wird.
Konstruktoraufrufsequenz: Basisklasse -> abgeleitete Klasse
Aufrufsequenz des Destruktors: abgeleitete Klasse -> Basisklasse
Bitte probieren Sie es selbst aus.