Héritage en C++

Résolu/Fermé
alexireynouar - 3 août 2013 à 16:00
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 10 août 2013 à 13:09
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

1 réponse

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
10 août 2013 à 13:09
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 :

#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
0