liste d'objets d'une class , est ce possible ???

liste d'objets d'une class , est ce possible ??? - C++ - Programmation

Marsh Posté le 15-10-2002 à 20:24:55    


la synthaxe :
 
#include "maClass.h"
 
  liste <maClass> obj1; //est ce correcte ??
 
vous me feriez un ultime plaisire de me montrer comment le faire
mercie bcp ...

Reply

Marsh Posté le 15-10-2002 à 20:24:55   

Reply

Marsh Posté le 15-10-2002 à 20:33:25    

Un truc comme ca :
 

Code :
  1. #include <list>
  2. class MaClass
  3. {
  4. public:
  5.  int a;
  6. };
  7. int main()
  8. {
  9. std::list<MaClass> liste;
  10. return 0;
  11. }


Reply

Marsh Posté le 15-10-2002 à 20:46:17    

y a aussi vector et quelques autres du genre.
 
Sinon sous C++Builder y a aussi TList et TObjectList


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 15-10-2002 à 21:00:26    

c'est tres gentille de votre part.
est ce possible d'appeler les methodes de la class maclass?
exp:
 
#include <list>  
   
  class MaClass  
  {  
     public:  
      int a;  
      void getA();
 
};  
   
  int main()  
  {  
     std::list<MaClass> liste;  
     
     liste.getA(); // est ce correcte ??
     liste.a.push_front(12); // est ce correcte ??
 
     return 0;  
  }  
merci bcp

Reply

Marsh Posté le 15-10-2002 à 21:05:08    

Le problème ici est que :
 
Tu veux appeler la méthode de ta classe sur tous les éléments de la liste ? Ou sur un seul élément en particulier ?
 
il faut bien voir que ta liste va peut etre contenir 1000 ou 2000 objets de maClass alors il faudra spécifier sur lequel agir.

Reply

Marsh Posté le 15-10-2002 à 21:14:56    

bon , je veux appeler la methode d'un objet , donc faut-il declarer la liste des objet ? et puis la question qui se pose comment repêcher ces objets pour les remplir par exemple ?
Ou bien si tu as une idée meilleure , je suis preneur .
je t'avoue que mon prof esr incapable de m'expliquer ce point .
merci

Reply

Marsh Posté le 15-10-2002 à 23:43:09    

Citation :


Code :
  1. int main() 
  2.     std::list<MaClass> liste; 
  3.    
  4.     liste.getA(); // est ce correcte ??  
  5.     liste.a.push_front(12); // est ce correcte ??  
  6.     return 0; 
  7. }

 


c'est pas bon, liste est du type std::list<MaClass> donc ne possede pas de methode getA(), ni d'attribut a. Si tu veux obtenir les objets contenus dans la liste, utilise un iterateur:
 

Code :
  1. std::list<MaClass>::iterator it = liste.begin();
  2. std::advance(it, 5); //pour acceder avancer sur le 5eme element
  3. (*it).getA(); //te donne le a du 5e element


 

Citation :

liste.a.push_front(12); // est ce correcte ??  


c'est pas correct non plus.
 
MaClass unObj;
unObj.a = 12;
liste.push_front(unObj);


Message édité par wpk le 15-10-2002 à 23:43:59
Reply

Marsh Posté le 16-10-2002 à 00:52:04    

Code :
  1. #include <list>
  2. class MaClass{
  3. int a; //privé, sinon pourquoi un accesseur ?
  4. public:
  5. int b;
  6. int getA(){ //get renvoyait void...
  7.  return a;
  8. }
  9. MaClass(int init){ //constructeur
  10.  a= init;
  11.  b= init*2;
  12. }
  13. };
  14. int main(){
  15. std::list<MaClass> liste;
  16. liste; //la liste
  17. liste.front(); //illégal, la liste est vide !
  18. liste.push_back(12); //12 converti en objet via le constructeur, objet mis dans la liste.
  19. liste.front(); //l'objet devant dans la liste
  20. liste.front().b; //attribut de cet objet
  21. liste.front().b= 11; //changer cet attribut
  22. liste.front().getA(); //appel de l'accesseur de cet objet
  23. return 0;
  24. }


Voilà le principe général...


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 16-10-2002 à 16:36:54    

Musaran a écrit a écrit :

Code :
  1. #include <list>
  2. class MaClass{
  3. int a; //privé, sinon pourquoi un accesseur ?
  4. public:
  5. int b;
  6. int getA(){ //get renvoyait void...
  7.  return a;
  8. }
  9. MaClass(int init){ //constructeur
  10.  a= init;
  11.  b= init*2;
  12. }
  13. };
  14. int main(){
  15. std::list<MaClass> liste;
  16. liste; //la liste
  17. liste.front(); //illégal, la liste est vide !
  18. liste.push_back(12); //12 converti en objet via le constructeur, objet mis dans la liste.
  19. liste.front(); //l'objet devant dans la liste
  20. liste.front().b; //attribut de cet objet
  21. liste.front().b= 11; //changer cet attribut
  22. liste.front().getA(); //appel de l'accesseur de cet objet
  23. return 0;
  24. }


Voilà le principe général...




 
Au moins une critique à ton exemple: en regle generale si un ctor prend un seul parametre, on met un explicit devant et on fait pas appel aux fonctionalités de conversion implicites pq un jour elles vont forcement te retomber sur la tronche et tu va passer 2 jours à essayer de trouver ton bug qui est planqué bien au chaud...
 
dans ton code, j'ecrirais:
 

Code :
  1. class MaClasse
  2. {
  3. explicit MaClasse(int init)
  4. {
  5. ...
  6. }
  7. ...
  8. };
  9. int main(){
  10. std::list<MaClass> liste;
  11. liste.push_back(MaClass(12));
  12. return 0;
  13. }

Reply

Marsh Posté le 17-10-2002 à 03:51:20    

C'est vrai pour une classe ExplosionThermonucleaire, on ne veut pas la voir surgir à moins de l'appeler explicitement.
C'est faux pour une classe MonEntier, on veut pouvoir écrire ME+1.
 
Pour MaClasse, va savoir...


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed