Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1366 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] faire un vector de classes héritées

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] faire un vector de classes héritées

n°442373
camarchepo​a
m'enfin !
Posté le 28-06-2003 à 00:18:46  profilanswer
 

bonjour !
 
j'ai un probleme pour créer un vector avec des classes héritées :
 

Code :
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <iostream.h>
  4. #include <vector>
  5. using namespace std;
  6. class Employe{
  7. int societe;
  8. public :
  9. int getSociete(){return societe;}
  10. void setSociete(int s){societe=s;}
  11. virtual void affiche() const = 0;
  12. };
  13. class CDD:public Employe{
  14. int service;
  15. public :
  16. int getService(){return service;}
  17. void setService(int sr){service=sr;}
  18. virtual void affiche() const {cout << "CDD " << service <<endl;}
  19. };
  20. class CDI:public Employe{
  21. int service;
  22. public :
  23. virtual void affiche() const {cout<<"CDI"<<endl;}
  24. };


 
Employe est une classe virtuelle pure
je vais donc créer des objets CDD et CDI
 
avec ces classes je voudrai créer un vecteur
pour éviter d'avoir deux vecteur (un pour CDD et un pour CDI) je voudrai en faire un grâce à la classe Employe ...  :(  
 
est-ce-que cela est possible ?
 
comment faire ensuite pour avoir accès aux fonxtions des classes héritées puisqu'à priori on ne connait pas la classe des objets du vecteur .....
 
autant de questions qui m'empêchent presque de dormir, et mon projet d'avancer  :cry:  
 
merci pour votre aide !!

mood
Publicité
Posté le 28-06-2003 à 00:18:46  profilanswer
 

n°442375
Taz
bisounours-codeur
Posté le 28-06-2003 à 00:26:03  profilanswer
 

un vector<Employe *>

n°442385
camarchepo​a
m'enfin !
Posté le 28-06-2003 à 00:37:37  profilanswer
 

++Taz a écrit :

un vector<Employe *>


 
effectivement ca semble ok :)
 
mais pour avoir acces à affiche apres, comment il faut faire ?
 

Code :
  1. vector<Employe *>::iterator it;
  2. for(it=vect.begin() ; it!=vect.end() ; it++)
  3. &it.affiche();


 
ca donne :

Code :
  1. error C2228: left of '.affiche' must have class/struct/union type


 
bah vi, il sait pas si c un CDD ou un CDI ... et moi non plus, donc pas de dynamic_cast possible ....

n°442398
Taz
bisounours-codeur
Posté le 28-06-2003 à 00:56:19  profilanswer
 

(*it)->affiche()

n°442400
camarchepo​a
m'enfin !
Posté le 28-06-2003 à 01:00:07  profilanswer
 

bien vu !
 
il me manquait les ( ) qui changent tout !
 
merci bcp !
ca marche super  :bounce:  :bounce:  :bounce:  :bounce:  :bounce:  :bounce:  :bounce:

n°443110
camarchepo​a
m'enfin !
Posté le 29-06-2003 à 15:35:12  profilanswer
 

erf, g encore un probleme avec ca ...
 
je voudrai que chaque fois qu'on fait un push_back() on fasse une copie de l'objet que l'on mets.
 
par exemple  
 

Code :
  1. void main(){
  2. vector<Employe *>vect;
  3. vector<Employe *>::iterator it;
  4. CDD e;
  5. e.setSociete(10);
  6. e.setService(24);
  7. vect.push_back(&e);
  8.         CDI i;
  9. i.setSociete(140);
  10. vect.push_back(&i);
  11.         // le deuxieme CDD
  12.         e.setSociete(10);
  13. e.setService(72);
  14. vect.push_back(&e);
  15. for(it=vect.begin() ; it!=vect.end() ; it++){
  16.  (*it)->affiche();
  17.         }
  18. }


 
ici on va avoir un CDD puis un CDI puis un CDD
 
le probleme c que les deux CDD sont égaux   :fou:  
 
alors y a-t-il un moyen pour dupliquer l'objet ?
(en fait ca va être dans un boucle donc il y aura plein de CDD/CDI mais je sais pas combien )
 
merci !
 


Message édité par camarchepoa le 29-06-2003 à 15:38:05
n°443115
Taz
bisounours-codeur
Posté le 29-06-2003 à 15:58:31  profilanswer
 

il faut créer tes objets avec new et apres tous les effacés aec delete sinon, tu utilises constament la meme adresse....

n°443122
camarchepo​a
m'enfin !
Posté le 29-06-2003 à 16:18:20  profilanswer
 

une fois de plus quel tallent !
 
voilà le prog complet (enfin celui de l'exemple) que l'on peut adapter :
 

Code :
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <iostream.h>
  4. #include <vector>
  5. using namespace std;
  6. class Employe{
  7. int societe;
  8. public :
  9. int getSociete(){return societe;}
  10. void setSociete(int s){societe=s;}
  11. virtual void affiche() const = 0;
  12. };
  13. class CDD:public Employe{
  14. int service;
  15. public :
  16. int getService(){return service;}
  17. void setService(int sr){service=sr;}
  18. virtual void affiche() const {cout << "CDD " << service <<endl;}
  19. };
  20. class CDI:public Employe{
  21. int service;
  22. public :
  23. virtual void affiche() const {cout<<"CDI"<<endl;}
  24. void affiche2(){cout<<"KOUKOU"<<endl;}
  25. };
  26. void main(){
  27. vector<Employe *>vect;
  28. vector<Employe *>::iterator it;
  29. CDD * e=new CDD;
  30. (*e).setSociete(10);
  31. (*e).setService(24);
  32. vect.push_back(e);
  33. CDI i;
  34. i.setSociete(140);
  35. vect.push_back(&i);
  36. e=new CDD;
  37. (*e).setSociete(123);
  38. (*e).setService(72);
  39. vect.push_back(e);
  40. cout<<"//////////// VECTOR ////////////"<<endl;
  41. for(it=vect.begin() ; it!=vect.end() ; it++){
  42.  (*it)->affiche();
  43. }
  44. getch();
  45. }


 
merci bcp ++Taz !!

n°443129
Taz
bisounours-codeur
Posté le 29-06-2003 à 16:32:39  profilanswer
 

1) passe tout avec new et fais tes delete
2) les setter/getter c pas trop C++, surtout dans ton cas: mais en public ou alors fais des références.3) pour les accesseurs, un petit const ça serait bien


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] faire un vector de classes héritées

 

Sujets relatifs
les classes : important ??std:vector
[C++] pb de typedef et struc/vector (rézolu)utilisation des objets (classes etc...)
dans quel cas est il preferable d'utiliser vector ou linkedlist ?[C++] Pb de conception - classes abstraites
vector ou tableau[C++] Un vector contenant des iterateur de liste, c'est possible ?
[c++] Passage par référence d'un vector <>[JAVA] afficher une liste de noms de classes
Plus de sujets relatifs à : [C++] faire un vector de classes héritées


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR