Héritage en C++
Résolu
Bonjour,
Je me demandais juste si il est nécessaire de surcharger le(s) constructeur(s) des classes qui héritent d'une autre, et si non quels risques prend-t-on (notamment avec les pointeurs) si on ne les surcharge pas.
Merci beaucoup
Je me demandais juste si il est nécessaire de surcharger le(s) constructeur(s) des classes qui héritent d'une autre, et si non quels risques prend-t-on (notamment avec les pointeurs) si on ne les surcharge pas.
Merci beaucoup
A voir également:
- Formate de bara héritage
- Formate pour taxer client sur nourriture - Forum Loisirs / Divertissements
- Cheickyvann formate de bara - Forum Vos droits sur internet
- Formate interpole bara ✓ - Forum Vos droits sur internet
- Format téléphone PDF - Forum PDF
- Menace "Interpol" après webcam coquine - Forum Vos droits sur internet
1 réponse
La manière la plus simple de vérifier, c'est d'écrire quelque chose dans le constructeur de la classe mère, et tu verras bien s'il est invoqué ou non.
Le risque de ne pas surcharger, c'est que certains membres de ta classe ne soient pas initialisé si le constructeur de la classe mère n'est pas invoqué (plus précisément, les membres de classe hérités de la classe mère).
A priori si tu ne mentionnes pas le constructeur de la classe mère, c'est son constructeur par défaut qui est invoqué. Du coup tu deviens dépendant de son implémentation au niveau de ta classe fille. À toi de voir au niveau de ton code si ça a du sens.
Exemple :
... donne :
Comme on le voit ici, le constructeur b_t::b_t(int) a invoqué a_t::a_t().
Bonne chance
Le risque de ne pas surcharger, c'est que certains membres de ta classe ne soient pas initialisé si le constructeur de la classe mère n'est pas invoqué (plus précisément, les membres de classe hérités de la classe mère).
A priori si tu ne mentionnes pas le constructeur de la classe mère, c'est son constructeur par défaut qui est invoqué. Du coup tu deviens dépendant de son implémentation au niveau de ta classe fille. À toi de voir au niveau de ton code si ça a du sens.
Exemple :
#include <iostream>
class a_t {
public:
int x;
a_t() : x(7){}
a_t(int x0) : x(x0){}
};
class b_t : public a_t {
public:
int y;
b_t(int y0) : y(y0) {}
};
int main() {
b_t b(5);
std::cout << b.x << ' ' << b.y << std::endl;
return 0;
}
... donne :
(mando@silk) (~) $ g++ toto.cpp (mando@silk) (~) $ ./a.out 7 5
Comme on le voit ici, le constructeur b_t::b_t(int) a invoqué a_t::a_t().
Bonne chance