Bonjour,
Je fais très rarement du C++ (et je suis assez célèbre pour dire beaucoup BEAUCOUP de mal de la POO en général), mais je me suis lancé sur un projet en groupe dont le C++ l'a emporté (heureusement, certaines parties sont en pure-good-old-C).
Bref, j'ai beaucoup oublié le fonctionnement des appels de fonctions lors d'héritage avec classes mères virtuelles.
Et je suis perdu car je ne sais plus quel mot clé utiliser (typename ?).
Voici les classes "simplifiées" au maximum pour mon problème (PrintNameClass contient l'écriture du nom de la classe courante, sauf pour la Class1 évidemment) :
Voici mon code :
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 class Classe1 { public: virtual voit PrintNameClass(void) = 0; }; class Classe2 : public Classe1 { public: virtual void PrintNameClass(void); }; class Classe3 : public Classe2 { public: void PrintNameClass(void); }
Lors du runtime, je me retrouve donc avec 2 print (ce qui est normal), mais, ils m'affichent :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 void maFonction(Classe2 myObj) { myObj.PrintNameClass(); } int main(void) { Classe3 myObj; myObj.PrintNameClass(); maFonction(myObj); }
Je voudrais pouvoir appeler la méthode PrintNameClass de la classe la plus "en bas" (Class3 pour le coup) plutôt que celle de la première classe l'implémentant, comment faire ?Classe3
Classe2
J'ai un lointain souvenir de "typename", mais en cherchant, cela n'intervient qu'à l'intérieur de templates, donc complètement en dehors de l'héritage.
J'ai farfouillé les cours, mais je me retrouve soit dans les "bases-bases-bases" du C++, soit dans les parties trop avancées.
Merci d'avance à vous !
Partager