Bonjour
Le probleme qui m'est pose est le suivant:
+ dans un premier temps on veut modeliser un parallelogramme puis ces classes deriver losange et rectangle.
+ dans un second temps on veut ajouter le carre tout en factorisant le code au maximum j'adjoins les 2 codes que j'ai produit.
premier cas: sans les carre
second cas: avec les carre
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109 class Parallelogramme { protected: double largeur; double longueur; double angle; public: // constructeur Parallelogramme::Parallelogramme(double l = 0, double L = 0, double a = 0) { largeur = l; longueur = L; angle = a; } AllongerX(double coeff) { largeur = largeur * coeff; } AllongerY(double coeff) { // L longueur = longueur * coeff; } ChangerAngle(double coeff) { angle = angle * coeff; } void setLargeur(double l) { largeur = l; } void setLongueur(double L) { longueur = L; } void setAngle(double a) { angle = a; } double getLargeur() { return largeur; } double getLongueur() { return longueur; } double getAngle() { return angle; } } class rectangle : public A { protected: double largeur double longueur; public: // constructeur rectangle::rectangle(double l, double L) : Parallelogramme(l, L), angle(90) { } // constructeur par recopie rectangle(rectangle &r) : Parallelogramme(r), largeur(r.largeur), longueur(r.longueur) {} } class losange : public A { protected: double cote; double angle public: // constructeur losange::losange(double c, double a) : Parallelogramme(c, c, a) { } // constructeur par recopie losange(losange &lo) : Parallelogramme(lo), c(lo.c) {} }
n'etant en rien certain de l'aspect conception avec heritage multiple et classe virtuelle, j'attend vos critiques
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127 class Parallelogramme { protected: double largeur; double longueur; double angle; public: // constructeur par defaut pour la derivation virtuelle Parallelogramme() {} Parallelogramme::Parallelogramme(double l = 0, double L = 0, double a = 0) { largeur = l; longueur = L; angle = a; } AllongerX(double coeff) { largeur = largeur * coeff; } AllongerY(double coeff) { largeur = largeur * coeff; } ChangerAngle(double coeff) { angle = angle * coeff; } /* * manque getter et setter */ void setLargeur(double l) { largeur = l; } void setLongeur(double L) { longueur = L; } void setAngle(double a) { angle = a; } double getLargeur() { return largeur; } double getLongueur() { return longueur; } double getAngle() { return angle; } } class rectangle : virtual public A { protected: double largeur; double longueur public: // constructeur rectangle::rectangle(double l, double L){ } // constructeur par recopie rectangle(rectangle &r) : Parallelogramme(r), largeur(r.largeur), longueur(r.longueur) {} } class losange : virtual public A { protected: double cote; double angle; public: // constructeur losange::losange(double c, double a) { } // constructeur par recopie losange(losange &lo) : Parallelogramme(lo), cote(lo.cote), angle(lo.angle) {} } class carre : public rectangle, public losange { protected: double cote; public: carre::carre(double c) : Parallelogramme(c, c, a) : rectangle() : losange() { // rectangle(l, l) : losange(l, 90) } }
par avance merci
Partager