Bonjour,
Je suis un débutant en C++ et je rencontre un probleme concernant le passage de l'héritage à la combinaison. Voilà mon probleme: j'ai les classes suivantes (Cube, Carre, Point) et pour chacune des figure, je dois efffectuer le calcul de sa surface et de son volume et notant que la Classe Cube aura une surface nulle et la classe Carre aura un volume nulle. Ce programme en bas qui est une partie de mon programme global illustre l'héritage que j'ai implémenter et qui marche selon mes attentes. Par contre, quand je veux changer l'héritage en combinaison en créant un objet de classe Carre dans le prototype de la classe Cube et en redéfinissant mon constructeur dans dans Cube.cpp, mon programme bloque (je suis dans dev C++) sans mesage d'erreur, car la console s'affiche et disparait presque automatiquement. Merci d'avance pour ceux qui vondront bien m'expliquer le passage de l'héritage à la combinaison que je voudrai faire.
- Cube hérite de Carre
- Carre hérite de Point
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 // Définition de la classe Point #ifndef CARRE_H #define CARRE_H #include "Point.h" #include <iostream> using namespace std; class Carre : public Point { friend std::ostream &operator<<(ostream &, const Carre &); public: // Constructeur par défaut Carre(float cote = 0.0); virtual float aire() const; float getcote() const { return cote; } virtual void afficher() const; virtual void afficherNomFigures() const {cout << "Carre: "; } protected: float cote; }; #endif
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 // Définition des fonctions membres de la classe Carre #include <iostream> #include <iomanip> #include "Carre.h" using namespace std; Carre::Carre(float a) {cote=a;} // Appel du constructeur de la classe de base float Carre::aire() const { return cote*cote; } void Carre::afficher() const { cout << "Cote=" << cote; } std::ostream &operator<<(ostream &output, const Carre &r) { r.afficher(); return output; }
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 // Définition de la classe Cube #ifndef CUBE_H #define CUBE_H #include "Carre.h" #include <iostream> using namespace std; class Cube : public Carre { friend ostream &operator<<(ostream &, const Cube &); public: // Constructeur par défaut Cube(float x = 0.0); void setCote(float); //virtual float cote() const; virtual float aire() const; virtual float volume() const; virtual void afficherNomFigures() const { cout << "Cube: "; } virtual void afficher() const; private: float cote1; }; #endif [/QUOTE] [QUOTE] // Définition des fonctions membres et amies de la classe Cube #include <iostream> #include <iomanip> #include "Cube.h" #include <iostream> Cube::Cube(float x) : Carre(x) // Appel du constructeur de la classe de base { setCote(x) ; } void Cube::setCote(float x) {cote = x;} float Cube::aire() const { return Carre::aire() ; // Aire de Cube } float Cube::volume() const { return Carre::aire() * cote ; } void Cube::afficher() const { cout << "Cote=" << cote; } std::ostream &operator<<(ostream &output, const Cube& c) { c.afficher(); return output; }
Partager