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

  FORUM HardWare.fr
  Programmation
  C++

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

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°427978
weed
Posté le 15-06-2003 à 17:29:56  profilanswer
 

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
mood
Publicité
Posté le 15-06-2003 à 17:29:56  profilanswer
 

n°427986
weed
Posté le 15-06-2003 à 17:32:27  profilanswer
 

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

n°427988
Taz
bisounours-codeur
Posté le 15-06-2003 à 17:34:18  profilanswer
 

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)

n°428003
weed
Posté le 15-06-2003 à 18:12:17  profilanswer
 

++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
n°428005
Taz
bisounours-codeur
Posté le 15-06-2003 à 18:17:33  profilanswer
 

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.     }

n°428009
weed
Posté le 15-06-2003 à 18:34:31  profilanswer
 

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
n°428013
Taz
bisounours-codeur
Posté le 15-06-2003 à 18:51:21  profilanswer
 

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

n°428323
weed
Posté le 15-06-2003 à 19:34:17  profilanswer
 

++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
n°428336
Taz
bisounours-codeur
Posté le 15-06-2003 à 19:52:38  profilanswer
 

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

n°428632
weed
Posté le 16-06-2003 à 00:09:08  profilanswer
 

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

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

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

 

Sujets relatifs
Comment on créé un plugin pour winamp 3 ?[VBA] Lire à partir d'un fichier texte
[PHP] nom de variables formée a partir d'autres variablesCree un fonction cadie pour un site de vente
[C++] Objet / héritage : cherche exercice[PHP] Connaître le nom du mois suivant à partir d'un timestamp...
[C#] Créer un UserControl à partir d'une classeJNI - Obtenir une image Java à partir d'une image Windows
[C++]Un problème de notions d'objet : redefinition de fonctions[access] envoyer un mail à partir des données d'un champ
Plus de sujets relatifs à : [c++]créé des objet carré a partir d'objet baton


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR