[c++] construction de tableau d'objets

construction de tableau d'objets [c++] - C++ - Programmation

Marsh Posté le 30-03-2003 à 19:01:10    

voila je veux creer un tableau d'objets seul hic
je me retrouve avec le meme pointeur pour chaque ligne de mon tableau d'objet
 
mon init de plateau (mon tableau d'objet qui pose pb)
 

Code :
  1. typedef Case *t_pCase;
  2. Plateau::Plateau(uint l, uint h)
  3.   assert (l > 4);
  4.   assert (h > 4);
  5.   assert (l % 2);
  6.   assert (h % 2);
  7.  
  8.   _largeur = l;
  9.   _hauteur = h;
  10.   _plateau = new t_pCase[l];
  11.   for (uint x = 0; x < l; x++)
  12.       {
  13. Objet &toto  = *(new Bloc_incassable);     <<<<<<<
  14. _plateau[x] = new Case[h](toto);           <<<<<<<
  15. for(uint y = 0; y < h ; y++)
  16.   {
  17.     Objet &toto  = *(new Bloc_incassable);
  18.     _plateau[x][y].make(toto);
  19.   }
  20.       }
  21. }


 
suivit de <<<<<< les lignes qui posent pb  
ci joint mon constructeur de cases
 

Code :
  1. Case::Case(Objet &a) : _obj(a)
  2. {
  3.   _obj = a;
  4. }


 
il faudrais que j'alloue une par une les cases au lieux de L par l  lidee que javais eut ettais de faire un contructeur qui ne fasse rien pour allouer les cases et apres faire une fonction make qui fout l'objet sur la case alloué  
sauf que le compilateur geule me disant que mon constructeur doit imperativement allouer obj  
 
voila si kkn a une idee


Message édité par koulip31 le 30-03-2003 à 19:02:24
Reply

Marsh Posté le 30-03-2003 à 19:01:10   

Reply

Marsh Posté le 30-03-2003 à 20:09:46    

moi je comprends rien à ton code, donne ta défintion de classe etc
 
sinon, c'est le parait exemple de code conforme au windows-coding-style
 
1) pas de assert
2) utilise la STL à fond
3) par de constructeur pour les tableaux, c'est le cosntructeur par défaut qui est appelé
4) Case::Case(Objet &a) : _obj(a)
{
 _obj = a;
}  
 :heink:  
 
et une const & serait mieux
5) uint -> unsigned
6) mets tes typedef dans ta classe

Reply

Marsh Posté le 30-03-2003 à 20:40:15    

Code :
  1. typedef Case *t_pCase;
  2. Plateau::Plateau(uint l, uint h)
  3.   assert (l > 4);
  4.   assert (h > 4);
  5.   assert (l % 2);
  6.   assert (h % 2);
  7.   _largeur = l;
  8.   _hauteur = h;
  9.   _plateau = new t_pCase[l];
  10.   for (uint x = 0; x < l; x++)
  11.       {
  12. Objet &toto  = *(new Bloc_incassable);     <<<<<<<
  13. _plateau[x] = new Case[h](toto);           <<<<<<<
  14. for(uint y = 0; y < h ; y++)
  15.   {
  16.     Objet &toto  = *(new Bloc_incassable);
  17.     _plateau[x][y].make(toto);
  18.   }
  19.       }
  20. }


 
Si tu veux utiliser un constructeur autre que celui par défaut dans la création de ton tableau, tu peux faire :

Code :
  1. Case ***_plateau = new Case**[l];
  2. for(int i = 0; i<l; i++) {
  3.   Bloc_incassable *toto = new Bloc_incassable;
  4.   _plateau[i] = new Case*[h];
  5.   for(int j = 0; j<h; j++)
  6.     _plateau[i][j] = new Case(toto);
  7. }


tu auras tous tes objets identiques, mais ce seront bien tous des objets différents

Code :
  1. Case::Case(Objet &a) : _obj(a)
  2. {
  3.   _obj = a;
  4. }


 
C'est quoi, _obj, là dedans ? :heink:


---------------
last.fm
Reply

Marsh Posté le 30-03-2003 à 20:47:34    

++Taz a écrit :


sinon, c'est le parait exemple de code conforme au windows-coding-style


heuuuu .... Plutot le parfait exemple de newb-in-C++-coding-style
 
 

++Taz a écrit :

...  donne ta défintion de classe etc ...


 
+1


---------------
last.fm
Reply

Marsh Posté le 30-03-2003 à 23:13:23    

theShOcKwAvE a écrit :

Code :
  1. typedef Case *t_pCase;
  2. Plateau::Plateau(uint l, uint h)
  3.   assert (l > 4);
  4.   assert (h > 4);
  5.   assert (l % 2);
  6.   assert (h % 2);
  7.   _largeur = l;
  8.   _hauteur = h;
  9.   _plateau = new t_pCase[l];
  10.   for (uint x = 0; x < l; x++)
  11.       {
  12. Objet &toto  = *(new Bloc_incassable);     <<<<<<<
  13. _plateau[x] = new Case[h](toto);           <<<<<<<
  14. for(uint y = 0; y < h ; y++)
  15.   {
  16.     Objet &toto  = *(new Bloc_incassable);
  17.     _plateau[x][y].make(toto);
  18.   }
  19.       }
  20. }


 
Si tu veux utiliser un constructeur autre que celui par défaut dans la création de ton tableau, tu peux faire :

Code :
  1. Case ***_plateau = new Case**[l];
  2. for(int i = 0; i<l; i++) {
  3.   Bloc_incassable *toto = new Bloc_incassable;
  4.   _plateau[i] = new Case*[h];
  5.   for(int j = 0; j<h; j++)
  6.     _plateau[i][j] = new Case(toto);
  7. }


tu auras tous tes objets identiques, mais ce seront bien tous des objets différents

Code :
  1. Case::Case(Objet &a) : _obj(a)
  2. {
  3.   _obj = a;
  4. }


 
C'est quoi, _obj, là dedans ? :heink:


 
voila la def de ma classe case
 

Code :
  1. class Case
  2. {
  3. private :
  4.   int _passable;
  5.   Objet &_obj;
  6. public :
  7.   Case(Objet &a);
  8.   void make(Objet &obj);
  9.   void del_obj();
  10.   ~Case();
  11.   void set_obj(Objet &obj);
  12.   Objet &get_obj();
  13.  
  14. };


 
 


Message édité par koulip31 le 30-03-2003 à 23:20:05
Reply

Marsh Posté le 31-03-2003 à 13:11:02    

Objet ?
 
Et c'est quoi, ta classe Objet ?

Reply

Marsh Posté le 31-03-2003 à 20:49:13    

theShOcKwAvE a écrit :

Objet ?
 
Et c'est quoi, ta classe Objet ?


 
la voila  :D vais publier tout mon code a la fin :p  
 

Code :
  1. class Objet
  2. {
  3. public :
  4.   int _score;
  5.   int _bank, _frame;
  6.   int _nbr_frame;
  7.   int _x, _y;
  8.   int _cassable;
  9.   int _passable;
  10.   int _health;
  11.   int get_type(int &bank, int &frame , int &nbr_frame)
  12.   {
  13.     bank = this->_bank;
  14.     frame = this->_frame;  // attention ici frame de debut  
  15.     nbr_frame = this->_nbr_frame;
  16.   }
  17.   virtual void make() = 0;
  18.   virtual void dest() = 0;
  19.   virtual void move() = 0;
  20. };
  21. class Bomb : public Objet
  22. {
  23.   SDL_TimerID  _id_timer;
  24. public :
  25.   Bomb();
  26.   void make();
  27.   void dest();
  28.   void move();
  29. };
  30. class Bloc_cassable : public Objet
  31. {
  32. public :
  33.   Bloc_cassable();
  34.   void make();
  35.   void dest();
  36.   void move();
  37. };
  38. class Bloc_incassable : public Objet
  39. {
  40. public :
  41.   Bloc_incassable();
  42.   void make();
  43.   void dest();
  44.   void move();
  45. };
  46. class Bloc_vide : public Objet
  47. {
  48. public :
  49.   Bloc_vide();
  50.   void make();
  51.   void dest();
  52.   void move();
  53. };


 
voila voila  
 [:koulip31]

Reply

Sujets relatifs:

Leave a Replay

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