Como na seção anterior, em uma classe derivada, o destruidor não pode ser absorvido pela classe derivada.
O ponto principal é que todos precisam ter clareza sobre a ordem de chamada dos destruidores das classes derivadas e das classes base. A ordem de chamada dos destruidores é completamente oposta à dos construtores. Podemos gerar uma mensagem no destruidor da classe derivada e no destruidor da classe base. e observe a sequência de chamada:
/************************************//Des: demonstração do tutorial C++//Autor: Huang/ /Direitos autorais:www.dotcpp.com//Data: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;}
Captura de tela em execução:
Como você pode ver, definir uma classe derivada AlarmClock gerará primeiro a classe base, enquanto a ordem de destruição é invertida.
Sequência de chamada do construtor: classe base -> classe derivada
Sequência de chamada do destruidor: classe derivada -> classe base
Por favor, tente você mesmo.