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 :
- baton t(1,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
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 :
- class baton
- {
- private :
- char orientation;
- std :: list<float> coordx, coordy;
- //std :: list<baton> coord;
- protected :
- static float pas;
- float x, y;
- public :
- //constructeur d'initialisation x,y et le pas
- baton (float = 1.1, float = -10);
- void affiche();
- baton & operator = (const baton & );
- baton operator+= (float const & );
- baton operator* (float const & );
-
- };
|
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 :
- baton baton :: operator += (float const &fois)
- {
- //h -> horizontal, v-> vertical
- baton res;
- res.x=x+pas*fois;
- if (orientation!='h')
- {
- coordx.push_back(x);
- coordy.push_back(y);
- }
- if (orientation!='o' && orientation=='h')
- {
- if (coordx.size()!=1)
- {
- coordx.pop_back();
- coordy.pop_back();
- }
- coordx.push_back(x);
- coordy.push_back(y);
- }
- orientation='h';
- return res;
- }
|
ma class carré
Code :
- class carre : public baton
- {
- private :
- static float unite;
- public :
- //constructeur
- carre(float abs=0, float ord=0) : baton (abs,ord)
- {
- baton t(abs,ord);
- t+=unite; t*unite; t+=-unite; t*-unite;
- *this=baton;
- }
- void chg_unite (const float &t);
- void operator=+ (const int & );
- void affiche ();
- };
|
et ses fonctions membre :
Code :
- void carre :: chg_unite (const float &t)
- {
- unite = t;
- }
- float carre :: unite = 0.2;
- void carre :: affiche ()
- {
- //baton t(x,y);
- //t+=unite; t*unite; t+=-unite; t*-unite;
- //t.baton :: affiche();
- }
- void carre :: operator + (const int &nb)
- {
- carre *t;
- t = new carre[nb];
- for (int j=0;j<nb;j++)
- {
- t[j] = new carre (x+j*unite,y);
- }
- }
|
Message édité par weed le 15-06-2003 à 18:37:23