Bonjour,
Je fais un programme avec une classe abstraite A qui contient la méthode virtuelle pure M, et deux classes dérivées de A, B et C, pour les quelles j'aurais envie d'utiliser l'une ou l'autre dans la définition des méthodes virtuelles M.
En pratique ça donne un truc du genre :
Voila donc si on rentre comme ça, bien entendu ça ne marche pas, car B::M() a besoin de C::M(), mais C::M() a besoin que B soit définie.
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
23
24
25 class A{ protected: ... public: virtual A *M() =0; }; class B : public A{ public: A *M(){ C *tmp=new C; *tmp=C(this,untruc); A *res=new A; *res=tmp->M(); return res; } class C : public A{ public: A *M(){ B *res=new B; *res=B(this,untruc); return res; }
J'avais pensé déclarer la méthode B::M() en dehors de B, après avoir défini C (et C::M()), mais ça ne marche pas non plus car si je ne donne pas à B une méthode M, B est une classe abstraite et je n'ai donc pas le droit de faire dans C::M() mon *res=B(this,untruc);.
Actuellement je m'en sort avec une troisième classe qui est en fait un cas particulier de B, mais que je me garde bien de faire hériter de cette dernière.
Conceptuellement je n'aime pas trop cette solution, mais je ne vois pas comment faire autrement.
Quelqu'un a-t-il une meilleure idée ?
Merci
--
Z.
Partager