/* * IUT de TOULON - département GEII * * Programme d'exemple illustrant de module de POO de deuxième année * * M. Grimaldi */ #include #include using namespace std; //______________________________________________________________________ // définition des classes // la classe Position2D class Position2D{ private: int x; int y; public: Position2D(); // constructeur par défaut Position2D(int x, int y); Position2D(double r, double t); void setX(int x); void setY(int y); int getX(){ return x;} int getY(){ return y;} void affiche(void); double distance(Position2D p); // distance à un autre point Position2D milieu(Position2D); Position2D operator + (Position2D); void rotation(int); }; //______________________________________________________________________ // implémentation des méthodes de la classe Point // acesseurs getter/setter void Position2D::setX(int x){ if (x<0) this->x = 0; else this->x = x; } void Position2D::setY(int y){ if (y<0) this->y = 0; else this->y = y; } // les 3 constructeurs Position2D::Position2D(){ // position par défaut setX(0); setY(0); } Position2D::Position2D(int x, int y){ setX(x); setY(y); } Position2D::Position2D(double r, double t){ setX(r*cos(t)); setY(r*sin(t)); } // la méthode d'affichage (---> affiche toi !) void Position2D::affiche(){ cout<<'('< donne moi la distance entre toi et ...) double Position2D::distance(Position2D p){ return sqrt((p.x-x)*(p.x-x) + (p.y-y)*(p.y-y)); } // milieu de deux positions (---> donne moi le milieu entre toi et ..) Position2D Position2D::milieu(Position2D p){ Position2D m((x+p.x)/2, (y+p.y)/2); return m; } // somme de deux positions (---> donne moi le la sonne de toi et de ...) Position2D Position2D::operator +(Position2D p){ Position2D m(x+p.x, y+p.y); return m; } // rotation d'une position /origine d'un angle en degrés (---> tourne de l'angle ... par rapport à l'origine!) // nota: la méthode modifie l'objet actif void Position2D::rotation(int a){ double t=atan2(y, x); // coordonnées polaires double r=sqrt(x*x + y*y); t = t+ a/180.*M_PI; setX(r*cos(t)); setY(r*sin(t)); return; } //______________________________________________________________________ // P R O G R A M M E P R I N C I P A L int main(int argc, char **argv) { Position2D p1, p2(67, -20), p3(100.0, 0.707), p4; // quatre positions // affichage des quatre positions initiales cout<<"p1:"; p1.affiche(); cout<<"p2:"; p2.affiche(); cout<<"p3:"; p3.affiche(); cout<<"p4:"; p4.affiche(); double d = p2.distance(p3); cout<<"distance p2 p3:"<