Rebonjour à tous.
Voilà, je vais tenter de faire au plus court.
J'ai une série de classe héritant l'une de l'autre, et je souhaiterais les placer dans un Vecteur template.
Je m'explique:
J'ai une classe Personne, qui est la classe mère principale. Ensuite, j'ai une classe MembrePersonnel qui hérite de la classe Personne.
Après celà, j'ai une série de classes, PersonnelScientifique, PersonnelAdministratif, PersonnelSurveillant, ... héritant toutes de la classe MembrePersonnel et donc aussi de la classe Personne (indirectement).
Voilà, maintenant je dois mettre en place un Vecteur template qui va contenir des pointeurs vers les différentes personnes étant membres du personnel ainsi que les personnels administratif, scientifique, ...
Pour ce faire, je procède de la façon suivante dans ma classe Vecteur:
pour le .h:
pour le .cxx:
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
30
31
32
33
34
35
36
37
38 #ifndef _VECTEUR #define _VECTEUR #include<string> #include"./piecemusee/piecemusee.h" #include"./piecemusee/piecemuseeart.h" #include"./personne/membrepersonnel.h" #include"./personne/personneladministratif.h" #include"./personne/personnelscientifique.h" #include"./personne/personnelsurveillant.h" template <class T> class Vecteur { private: T *Data; int nbrElem; int *Index; public: // constructeur // d'initialisation Vecteur(int n = 20 ); // destructeur ~Vecteur(void) { delete[] Data; } // methodes d'acces au variables et de construction d'index T& operator[](int i){ return *(Data+i);}; int placelibre(); void setindex(int N, int NV){ Index[N] = NV; } int getindex(int N){ return Index[N]; } }; #endif
Je pense qu'il n'y a pas d'erreur dans le code précédent. Dans le main, je procède comme suit:
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
30
31
32
33 #include"Vecteur.h" template <class T> Vecteur<T>::Vecteur( int n ) { Data = new T[n]; nbrElem = n; Index = new int[n]; for( int i = 0; i < n; i++) Index[i] = 0; } template <class T> int Vecteur<T>::placelibre() { int i; for( i = 0; i<nbrElem && Index[i] != 0; i++); if( i >= nbrElem ) i = -1; return i; } template class Vecteur<piecemusee>; template class Vecteur<piecemuseeart>; template class Vecteur<int>; template class Vecteur<membrepersonnel>; template class Vecteur<membrepersonnel*>; template class Vecteur<personneladministratif*>; template class Vecteur<personnelscientifique*>; template class Vecteur<personnelsurveillant*>;
Par contre, lorsque j'exécute mon code, il ne me propose pas de saisir les données propres au personneladministratif, il s'arrête à la saisie du membrepersonnel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 // déclaration de mon Vecteur Vecteur<membrepersonnel *> VMP(10); // création d'un nouvel élément VMP[imp] = new personneladministratif(); // saisie de l'élément créé VMP[imp]->insert(); // incrémentation du nombre d'élément imp++;
Est ce que pour résoudre ce problème, je dois faire un casting quelque part? Si oui, où?
Ou alors est ce que je dois déclarer mon Vecteur différement? Parce que en fait je dois réussir à mettre toutes les valeurs de membrepersonnel et celle qui en hérite dans le même vecteur.
J'espère ne pas m'être embrouiller dans les explications de mon problème, et vous remercie d'avance pour l'aide que vous pourrez m'appoter.
Richard_sraing
Partager