[c++]créé des objet carré a partir d'objet baton

créé des objet carré a partir d'objet baton [c++] - C++ - Programmation

Marsh Posté le 15-06-2003 à 17:29:56    

Bonjour,
 
Je possède une classe baton me permettant d'afficher et de manipuler des "batons" et de dessiner tres facillement sous opengl.
 
donc par exemple  

Code :
  1. baton t(1,2)
  2. t+1; t*1; t-1; t*-1;

 
permet d'enregistrer des coordonnées pour me faire un carré
t+1; -> je vais a gauche  
t*1 -> je monte  
t+(-1) -> je descends
t+(-1) -> je vais a droite
puis je l'affiche  

Code :
  1. t..affiche();


 
ce que j'aimerai, c'est la même chose avec une class carré, dc carré est un derivé de baton.
j'aimerais faire un struc du style
carre t2(1,2);  
t2.affiche();  
pour que cela m'affiche un carré à (1,2) de coté 1.
 
je pense que c'est au niveau du contructeur de carré que j'ai un petit souci:
je créé un objet baton :
baton t(abs,ord);
je puis j'ajoute les coordonnées ds l'objet t      
t+=unite; t*unite; t+=-unite; t*-unite;
puis j'aimerais affecter ces coordonnées à l'objet en lui meme que je manipule  
dc  
this = t;
ms cela ne fonctionne pas  
 
 
Est que vous vooyez ce que j'aimerais faire ?
J'espere que j'ai été suffisamment assez claire

Code :
  1. class baton
  2. {
  3. private :
  4.       char orientation;
  5.       std :: list<float>  coordx, coordy;
  6.       //std :: list<baton>  coord;
  7.    protected :
  8.     static float pas;
  9.       float x, y;
  10. public :
  11.       //constructeur  d'initialisation x,y et le pas
  12.       baton (float = 1.1, float = -10);
  13.        void affiche();
  14.       baton & operator = (const baton & );
  15.       baton operator+= (float const & );
  16.       baton operator* (float const & );
  17.      
  18. };


 
comme vous pouvez le remarquer les coordonnées sont notés ds une liste
 
 
voici ma fonction si peut vous aider si j'ai pas été très claire  

Code :
  1. baton baton :: operator += (float const &fois)
  2. {
  3.    //h -> horizontal, v-> vertical
  4.    baton res;
  5.    res.x=x+pas*fois; 
  6.    if (orientation!='h')
  7.     {
  8.                        coordx.push_back(x);
  9.                         coordy.push_back(y);
  10.                       }
  11.    if (orientation!='o' && orientation=='h')
  12.    {
  13.       if (coordx.size()!=1)
  14.              {
  15.                  coordx.pop_back();
  16.                  coordy.pop_back();
  17.              }
  18.       coordx.push_back(x);
  19.       coordy.push_back(y);
  20.     }
  21.    orientation='h';
  22.    return res;
  23. }


 
 
 
ma class carré

Code :
  1. class carre : public baton
  2. {
  3. private :
  4.     static float unite;
  5.    public :
  6.     //constructeur
  7.       carre(float abs=0, float ord=0) : baton (abs,ord)
  8.       {
  9.        baton t(abs,ord);
  10.      t+=unite; t*unite; t+=-unite; t*-unite;
  11.                       *this=baton;
  12.       }
  13.       void chg_unite (const float &t);
  14.       void operator=+ (const int & );
  15.       void affiche ();
  16. };


 
et ses fonctions membre :

Code :
  1. void carre :: chg_unite (const float &t)
  2. {
  3. unite = t;
  4. }
  5. float carre :: unite = 0.2;
  6. void carre :: affiche ()
  7. {
  8. //baton t(x,y);
  9.    //t+=unite; t*unite; t+=-unite; t*-unite;
  10.    //t.baton :: affiche();
  11. }
  12. void carre :: operator + (const int &nb)
  13. {
  14.    carre *t;
  15.    t = new carre[nb];
  16.    for (int j=0;j<nb;j++)
  17.    {
  18.     t[j] = new carre (x+j*unite,y);
  19.    }
  20. }


Message édité par weed le 15-06-2003 à 18:37:23
Reply

Marsh Posté le 15-06-2003 à 17:29:56   

Reply

Marsh Posté le 15-06-2003 à 17:32:27    

et apres la class dérivée me permetra de faire des briques tetris

Reply

Marsh Posté le 15-06-2003 à 17:34:18    

utlise cpp et montre nous précisément ou est ton problème
 
l'operator= ne s'herite pas. mieux vaut ecrire operator+ hors classe en fonction de operator += (et pareille pour les autres)

Reply

Marsh Posté le 15-06-2003 à 18:12:17    

++Taz a écrit :


l'operator= ne s'herite pas.oki il faut redéfinnir les fontions operator  


Citation :

mieux vaut ecrire operator+ hors classe en fonction de operator += (et pareille pour les autres)


 
je ne comprends pas du tout ce que tu veux dire :
hors de la class en de operator +=
 
l'operateur * me permet de monter et le + me permet d'aller a droite ....
je sais ce n'est pas tres parlant ms bon et peu judicieux d'utiliser le + et le * pour se deplacer ...
 
ce que j'aimerais c'est  de faire ca :

Code :
  1. carre t2(1,2); 
  2. t2.affiche();


 
me creer un objet carre et l'afficher.
 
au niveau du contructeur de carré  
je créé l'objet t et je fais un carré  
j'aimerais affecté le carré de type baton a carré
 

Code :
  1. carre(float abs=0, float ord=0) : baton (abs,ord) 
  2.      {
  3.       baton t(abs,ord);
  4.     t+=unite; t*unite; t+=-unite; t*-unite;
  5.                      *this=baton;
  6.      }


Message édité par weed le 15-06-2003 à 18:16:34
Reply

Marsh Posté le 15-06-2003 à 18:17:33    

ton code veut absolument rien dire du tout je sais pas si tu t'en rends compte.
 
je vois pas pourquoi tu fais pas ça
 

Code :
  1. carre(float abs=0, float ord=0) : baton (abs,ord) 
  2.     { 
  3.    baton::operator+=(unite);
  4. t*unite; t+=-unite; t*-unite;  // aucune idée de ce que tu fais ici
  5.     }

Reply

Marsh Posté le 15-06-2003 à 18:34:31    

excuse moi, dsl de t'avoir embrouiller avec  
ca
en fait j'ai 2 fonctions menbres avec les opertor + et +=  
et j'en retiré la mauvais ici pour presemnter le problème
l'operator + est inutile, oubli le  .....
 
 
dc j'utilise bien comme fonction menbre

Code :
  1. baton operator+= (float const & );


     
t*unite; t+=-unite; t*-unite;  => je pense maintenat que tu sais a quoi cela sert, cela perds d'ajouter ds une listes des coordonées


Message édité par weed le 15-06-2003 à 18:38:47
Reply

Marsh Posté le 15-06-2003 à 18:51:21    

t*unite; t+=-unite; t*-unite;
 
moi quand j'ecris
 
t*3; t+=-3; t*-3 je m'attends seulement à décrémneter t de 3
 
 
ta sémantique est imbittable
 
 
à moins que sache ce que tu fais, aulieu de faire 36 operator=, fais plusieurs constructeur

Reply

Marsh Posté le 15-06-2003 à 19:34:17    

++Taz a écrit :

t*unite; t+=-unite; t*-unite;
 
moi quand j'ecris
 
t*3; t+=-3; t*-3 je m'attends seulement à décrémneter t de 3
 
 
ta sémantique est imbittable
 
 
à moins que sache ce que tu fais, aulieu de faire 36 operator=, fais plusieurs constructeur


 
je trouve ca assez claire mes batons  
tu declares un baton et apres tu te balades, comme lorsque tu t'amusais a déplacé une tortue qd tu etait momes. En lisant les instructions, la faisais déplacer.  
 "deplacez de 3 cases en haut, puis 3 cases a gauche puis descendez de 3 case en bas"
 
en fait c'est ce que tu vient de faire ..

Code :
  1. t*3; t+=-3; t*-3


c'est une partie du A par exemple  
|---|
|   |
|   |
 
comprends tu comment cela fonctionne maintenant l'operator + et * de la classe baton...
 

Citation :

à moins que sache ce que tu fais, aulieu de faire 36 operator=, fais plusieurs constructeur


oui je suis assez bien content de moi, cela m'a permit de creer la classe chiffre me permettant d'ecrire sous opengl.
 
 
dc voilou  

Code :
  1. carre(float abs=0, float ord=0) : baton (abs,ord) 
  2.     { 
  3.      baton t(abs,ord); 
  4.    t+=unite; t*unite; t+=-unite; t*-unite; 
  5.                     this=baton; 
  6.     }


j'ai une erreur au niveau de l'affectation *this=baton;  
Error:  BATON.H(68,3):Improper use of typedef 'baton'
comment faut il faire ???
 
this designe la classe que je suis en train d'utiliser dc carre
=> this = baton est equivalent à carre = baton, il faut dc peut etre surdéfinnir l'operateur = !!!!


Message édité par weed le 15-06-2003 à 19:36:51
Reply

Marsh Posté le 15-06-2003 à 19:52:38    

relis moi et comrpends bien que vu ce que tu fais carré est un baton! alors  
 

Code :
  1. carre(float abs=0, float ord=0) : baton (abs,ord) 
  2.    { 
  3.   baton::operator+=(unite);
  4. t*unite; t+=-unite; t*-unite;  // aucune idée de ce que tu fais ici
  5.    }


 
 
fonctionne
 
je crois que tu ne sais absolument pas que tu fais et que tu as des notions tres fabiles sur l'heritage et la POO

Reply

Marsh Posté le 16-06-2003 à 00:09:08    

je te remercie Taz pour cette dernière remarque  :(  
 
un héritage est une spécialisation  
 
or dans ce cas, un carré possède (a) des batons ....
 
dc ca serait peut etre pas vraiment un heritages, ms plutot un tableau d'objet de baton que l'on déclarerait ds carré.  
 
 
 

Code :
  1. carre(float abs=0, float ord=0) : baton (abs,ord) 
  2.   { 
  3. baton::operator+=(unite);
  4. t*unite; t+=-unite; t*-unite;  // aucune idée de ce que tu fais ici  
  5. }

 
 
je ne comprends pas du tout ce que tu veux faire avec  

Code :
  1. baton::operator+=(unite);


c'est meme pas son prototype, ni meme un appel a la fonction
 
Que me conseille tu de faire ????
je ne veux surtout pas changer l'operator + et * qui fonctionne a mmerveille
 
sinon si c'est trop difficile ou trop long, je travaillerais directement sur les listes :
std :: list<float>  coordx, coordy;  
sans utilisé mes operateurs de + et * qui s'occupes d'ajouter les coordonnées automatiquement. Ca serait dommage de pas en profiter ms bon voilou ......


Message édité par weed le 16-06-2003 à 00:12:32
Reply

Sujets relatifs:

Leave a Replay

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