Bonjour, bonjour !!
j'étais inscrit sur un mooc c++ traitant de la poo... que je n'est pas été en mesure de finir en date et en heure ... du coup je m'y suis remis et je me retrouve donc sans personne pour me donner un coup de mainétant donné qu'il à fermé ses portes...
bref du coup me voilà en train de vous ennuyer vous !!
Je ne comprends pas pourquoi en ligne 14 on doit utiliser le passage par référence... est-ce à cause du mot const de cette fonction get?
En fait j'aimerais être bien sûr d'avoir compris...
voici l'exercice qui me pose problème :
ennoncé :
Le but de cet exercice est d'écrire une classe représentant la notion de cercle.
Écrivez un programme Cercle.cc dans lequel vous définissez une classe Cercle ayant comme attributs un rayon et les coordonnées du centre (du cercle).
Déclarez ensuite les méthodes «get» et «set» correspondantes, par exemple :
void getCentre(double& x, double& y) const { ... }
void setCentre(double x, double y) { ... }
...
NOTE : ceci n'est qu'un exemple parmi d'autres. Si vous préférez d'autres prototypes pour ces méthodes, libre à vous d'implémenter votre solution.
Vous pourrez en particulier réviser votre programme après avoir fait les exercices 3 et 4.
Ajoutez ensuite les méthodes (faisant partie de l'interface) :
double surface() const qui calcule et retourne la surface du cercle (pi fois le carré du rayon);
bool estInterieur(double x, double y) const qui teste si le point de coordonnées (x,y) passé en paramètre fait ou non partie du cercle (frontière comprise : disque fermé).
La méthode retournera true si le test est positif, et false dans le cas contraire.
Dans le main(), instanciez deux objets de la classe Cercle, affectez des valeurs de votre choix à leur attributs et testez vos méthodes surface et estInterieur.
Remarque : la constante pi est souvent définie comme M_PI dans le module cmath (#include <cmath> au début de votre programme).
Si ce n'est pas le cas pour votre compilateur, ajoutez simplement les lignes suivantes en début de votre programme, après les #include et le using namespace std; :
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
solution proposée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 #include <iostream> #include <cmath> // pour M_PI et sqrt() using namespace std; class Cercle { public: double surface() const { return M_PI * rayon * rayon; } bool estInterieur(double x1, double y1) const { return (((x1-x) * (x1-x) + (y1-y) * (y1-y)) <= rayon * rayon); } void getCentre(double& x_out, double& y_out) const { x_out = x; y_out = y; } void setCentre(double x_in, double y_in) { x = x_in; y = y_in; } double getRayon() const { return rayon; } void setRayon(double r) { if (r < 0.0) r = 0.0; rayon = r; } private: double rayon; double x; // abscisse du centre double y; // ordonnée du centre }; int main () { Cercle c1, c2; c1.setCentre(1.0, 2.0); c1.setRayon(sqrt(5.0)); // passe par (0, 0) c2.setCentre(-2.0, 1.0); c2.setRayon(2.25); // 2.25 > sqrt(5) => inclus le point (0, 0) cout << "Surface de C1 : " << c1.surface() << endl; cout << "Surface de C2 : " << c2.surface() << endl; cout << "position du point (0, 0) : "; if (c1.estInterieur(0.0, 0.0)) cout << "dans"; else cout << "hors de"; cout << " C1 et "; if (c2.estInterieur(0.0, 0.0)) cout << "dans"; else cout << "hors de"; cout << " C2." << endl; return 0; }
Partager