aide pour la conception avec heritage multiple
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
Code:
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) {}
} |
second cas: avec les carre
Code:
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)
}
} |
n'etant en rien certain de l'aspect conception avec heritage multiple et classe virtuelle, j'attend vos critiques
par avance merci