Bonjour à tous,
Je suis en train d'essayer de faire un composant générique avec lequel j'ai un petit soucis.
Voici le problème. Tout d'abord, il y a une série de petites classe de base destinée à être dérivées:
Puis ensuite vient l'implémentation spécifique :
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
26
27
28 namespace generic { struct base1 { base1(){} ~base1(){} virtual void func(void){cout << "generic::base1" << endl;} }; struct base2 { base2(){} ~base2(){} virtual void func(void){cout << "generic::base2" << endl;} }; struct base3 { base3(){} ~base3(){} virtual void func(void){cout << "generic::base3" << endl;} }; struct deriv: virtual public base1, virtual public base2, virtual public base3 { deriv(){} ~deriv(){} virtual void func(void){cout << "generic::deriv" << endl;} }; }
Lors de l'utilisation ces classes, je ne parvient pas à appeler les fonctions membres souhaitées. Ainsi le programme suivant:
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
26
27
28
29 namespace custom { struct base1: virtual public generic::base1 { base1(){} ~base1(){} virtual void func(void){cout << "custom::base1" << endl;} }; struct base2: virtual public generic::base2 { base2(){} ~base2(){} virtual void func(void){cout << "custom::base2" << endl;} }; struct base3: virtual public generic::base3 { base3(){} ~base3(){} virtual void func(void){cout << "custom::base3" << endl;} }; struct deriv: virtual public generic::deriv, virtual public custom::base1, virtual public custom::base2, virtual public custom::base3 { deriv(){} ~deriv(){} virtual void func(void){cout << "custom::deriv" << endl;} }; }
génère la sortie:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 int main(int, char *[]) { int size=sizeof(custom::deriv); generic::deriv *ptr=new custom::deriv; ptr->base1::func(); ptr->base2::func(); ptr->base3::func(); ptr->deriv::func(); return 0; }
alors que celle attendue devrait plutôt ressembler à:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 generic::base1 generic::base2 generic::base3 generic::deriv
J'aurais donc voulu savoir ce qui clochait dans ma conception ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 custom::base1 custom::base2 custom::base3 custom::deriv
Merci d'avance.
Partager