Association entre la classe Cercle et la classe Point
Objectifs:
- Comprendre la notion de classe et objet
- Instancier des objets
- Définir et appeler des fonctions membres
- Surcharger des fonctions membres
- Définir et appeler des constructeurs
- Associer entre les classes
- Définir les accesseurs (getter) et les mutateurs (setter)
Énoncé:
Ecrire une classe en C++ permettant de représenter des cercles qui se caractérisent par un rayon et un centre de type point (cf. exercice Classe Point)
Les opérations possibles sur un cercle sont :
- l’affichage des caractéristiques du cercle (méthode affiche()).
- l'obtention de son rayon,
- le changement de son rayon,
- l'obtention de son centre,
- la translation de son centre,
- le calcul de sa surface,
- le calcul de son périmètre,
- le test de l'égalité du cercle avec un autre cercle,
- la vérification de l'appartenance d'un point au cercle,
Prévoir deux constructeurs :
- Constructeur avec deux paramètres correspondant au rayon et au point centre
- Constructeur avec deux paramètres correspondant au rayon et aux coordonnées du point centre
Faire les modifications nécessaires à la Classe Point
Pour tester la classe, écrire un programme principal effectuant les opérations suivantes :
- création d'un cercle de rayon 1 et de centre (10,10)
- affichage de ses caractéristiques
- calcul et affichage de son périmètre et de sa surface
- doublement de son rayon
- à nouveau calcul et affichage de son périmètre et de sa surface
- déplacement du cercle pour ramener son centre à l'origine
- vérification que le point (1,1) est bien à l'intérieur du cercle
- vérification que le point (3,3) est bien à l'extérieur du cercle
- test de l'égalité du cercle avec un autre cercle de centre (0,0) et de rayon 2
Affichage du cercle : Le rayon est: 1
Le centre est : (10,10)
-----
Perimetre: 6.28
Surface: 3.14
Apres doublement du rayon :
Perimetre: 12.56
Surface: 12.56
Le point : (1,1) est a l'interieur du cercle
Le point : (3,3)est a l'exterieur du cercle
Les deux cercles sont identiques
Classe Point (après modification):
class point { float x, y; public: point(float a = 0, float b = 0){ x = a; y = b; } float getX(){ return x; } void setX(float a){ x = a; } float getY(){ return y; } void setY(float a){ y = a; } void afficher(){ cout << "(" << x << "," << y << ")"; } void translation (float a){ x += a; y += a; } bool comparer(point p){ if(x == p.x && y == p.y) return true; return false; } float distance(point p){ return sqrt(pow(x - p.x , 2) + pow(y - p.y , 2)); } };
Les modifications effectuées sont l'ajout des getters et setters pour pouvoir accéder aux coordonnées du centre depuis la classe Cercle
Classe Cercle:
class cercle{ float r; point centre; public: cercle(float a, point p){ r = a; centre = p; } cercle(float a, float x, float y){ r = a; centre.setX(x); centre.setY(y); } void afficher(){ cout << "Affichage du cercle : "; cout<<"Le rayon est: " << r << endl; cout << "Le centre est : "; centre.afficher(); cout<<endl<<"-----"<<endl; } float getRayon(){ return r; } void setRayon(float a){ r = a; } point getCentre(){ return centre; } void translation(float a){ centre.translation(a); } float surface(){ return r * r * 3.14; } float perimetre(){ return 2 * 3.14 * r; } bool egalite(cercle c){ return (c.r == r and centre.comparer(c.centre)); } bool appartenance(point p){ if(centre.distance(p) <= r){ return true; } return false; } };
Programme de test (main):
int main() { point p(10, 10); cercle c(1, p); c.afficher(); cout << "Perimetre: " << c.perimetre() << endl << "Surface: " << c.surface() << endl; c.setRayon(c.getRayon() * 2); cout << "Apres doublement du rayon : " << endl << "Perimetre: " << c.perimetre() << endl << "Surface: " << c.surface() << endl; c.translation(-10); point p1(1, 1); cout << "Le point : "; p1.afficher(); if(c.appartenance(p1)){ cout << " est a l'interieur du cercle" << endl; } else{ cout << " est a l'exterieur du cercle" << endl; } point p2(3, 3); cout << "Le point : "; p2.afficher(); if(c.appartenance(p2)){ cout << "est a l'interieur du cercle" << endl; } else{ cout << "est a l'exterieur du cercle" << endl; } cercle c2(2, 0, 0); if(c.egalite(c2)){ cout << "Les deux cercles sont identiques" << endl; } else cout << "Les deux cercles ne sont pas identiques" << endl; return 0; }
N'oubliez pas d'inclure la bibliothèque cmath pour l'utilisation de la fonction sqrt