J'ai une petite question :
Dans le code qui suit, j'ai une classe Composant, et trois classe cercle rectangle et groupe qui en hérite.
Je veux que mes groupe puissent contenir des composant j'ai donc un vecteur de pointeur sur des composant dans lequel je met les composants du groupe :
Vous avez peut être remarqué que je n'initialise jamais le membre listeComposant avec un new dans le constructeur de Groupe, et pourtant je ne rencontre aucun probleme, pourquoi ?
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 #ifndef DEF_COMPOSANT #define DEF_COMPOSANT #include <vector> #include <iostream> #include <string> using namespace std; class Composant { public: virtual void ajoute(Composant * c) {} public: virtual void affiche() = 0; public: Composant(string nom) { this->nom = nom; } public: virtual string getNom() { return this->nom; } public: virtual ~Composant() {} private: string nom; }; class Cercle : public Composant { public: Cercle(string nom) : Composant(nom) {} public: void affiche() { cout << "Cercle : " << this->getNom() << endl; } }; class Rectangle : public Composant { public: Rectangle(string nom) : Composant(nom) {} public: void affiche() { cout << "Rectangle : " << this->getNom() << endl; } }; class Groupe : public Composant { public: Groupe(string nom) : Composant(nom) {} public: void ajoute (Composant * c) { listeComposants.push_back(c); } public: void affiche() { cout << "Groupe : " << this->getNom() << " contenant : " << endl; for (int i = 0; i < listeComposants.size(); i++) { listeComposants[i]->affiche(); } cout << "----------- fin groupe " << this->getNom() << endl; } private: vector<Composant *> listeComposants; }; #endif
voici le main que j'utilise pour tester le code :
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 #include "composant.h" using namespace std; int main() { Cercle * c1 = new Cercle("C1"); Cercle * c2 = new Cercle("C2"); Rectangle * r1 = new Rectangle("R1"); c1->affiche(); Groupe * ga = new Groupe("GA"); ga->ajoute(c1); ga->ajoute(r1); ga->affiche(); Groupe * gb = new Groupe("GB"); gb->ajoute(ga); gb->ajoute(c2); gb->affiche(); delete c1; delete c2; delete r1; delete ga; delete gb; }
Partager