Si la classe fille possède un constructeur, celui-ci
ne sera appelé qu’une fois le constructeur
de la classe mère exécuté. Dans le
cas des destructeurs, l’ordre est inverse, celui de
la classe fille est appelé avant celui de la classe
mère.
Exemple :
class MaClasse1 {
public:
MaClasse1( ) {
cout<< "MaClasse1" << endl;
}
~MaClasse1( ) {
cout<< "~MaClasse1" << endl; }
};
class MaClasse2 : public
MaClasse1 {
public:
MaClasse2( ) {
cout<< "MaClasse2" << endl;
}
~MaClasse2() {
cout<< "~MaClasse2" << endl;
}
};
void main() {
MaClasse2 *c2 = new MaClasse2;
// ...
delete c2;
}
Affichera :
MaClasse1
MaClasse2
~MaClasse2
~MaClasse1
Dans le cas ou les constructeurs nécessiteraient
des paramètres, on aurait à définir
:
maClasse2::maClasse2(paramètres):
maClasse1(paramètres)
Remarque :
Il est tout à fait possible de convertir une instance
de classe dérivée en une instance de la classe
de base. L'inverse est par contre interdit puisque le compilateur
ne saurait pas comment initialiser les membres de la classe
dérivée.