initialisation automatique d'un vecteur comme membre d'une classe
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 :
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
|
#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 |
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 ?
voici le main que j'utilise pour tester le code :
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
|
#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;
} |