Bonjour,
Cela fait plusieurs jours que je fais face à un petit problème : j´ai une classe mère d´où plusieurs classes tirent leur héritage.
J´appelle une fonction de la classe mère qui n´est redéfinie dans aucune classe fille. De cette fonction, j´aurai besoin d´en appeler une qui se situe :
- soit dans la classe mère pour la quasi-totalité des instances des classes filles
- dans une des classe fille (pour les objets d´une seule classe fille).
Ouh là, je sens que je ne suis pas claire. Voici un exemple expurgé, contenant deux classes :
- classe maitre :
maitre.h
maitre.cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #ifndef MAITRE_H #define MAITRE_H #include <iostream> class maitre { public: maitre(); virtual ~maitre(); void A(); void B(); protected: private: };
- classe fils :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #include "maitre.h" maitre::maitre() { //ctor } maitre::~maitre() { //dtor } void maitre::A() { B(); } void maitre::B() { printf("perdu\n"); }
fils.h :
fils.cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #ifndef FILS_H #define FILS_H #include "maitre.h" class fils : public maitre { public: fils(); virtual ~fils(); void B(); protected: private: }; #endif // FILS_H
Enfin, le main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #include "fils.h" fils::fils() { //ctor } fils::~fils() { //dtor } void fils::B() { printf("gagne !!!!!!!!!!!\n"); }
En gros, j´aimerais afficher :"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 int main() { maitre *m1 = new maitre(); fils *f1 = new fils(); m1->A(); f1->A(); delete(m1); delete(f1); return 0; }
perdu
gagne !!!!"
Pour l''instant, j'obtiens :"
perdu
perdu
"
C'est donc que pour fils, c'est la fonction B de maitre qui est appelé et non la fonction B ("la plus spécialisée") de fils. Y-a-t'il un moyen d'obtenir ce comportement, vu que "maitre" ne connait pas "fils" ?
Merci d'avance et désolé si la question parait bête !
Partager