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
|
class Vehicule
{
public:
virtual ~Vehicule() { }
virtual void roule() = 0;
};
class Voiture : public Vehicule
{
public:
void roule() { std::cout << "Je suis une voiture et je roule" << std::endl; }
void transporter_famille(const Famille& f) { /* ... */ }
};
class Camion : public Vehicule
{
public:
void roule() { std::cout << "Je suis un camion et je roule" << std::endl; }
void transporter_marchandise(const Marchandise& m) {*/* ... */ }
};
std::vector<Vehicule*> v;
v.push_back(new Camion);
v.push_back(new Voiture);
v.push_back(new Voiture);
for(int i = 0 ; i < v.size(); i++)
{
v[i]->roule();
// v[i]->transporter_marchandise(Marchandise()); ne compilerait pas car
// transporter_marchandise ne fait pas partie de l'interface de Vehicule,
// qui est l'interface qui nous permet de manipuler indifféremment
// des Camion ou des Voiture.
}
// il faut effacer proprement les pointeurs ici
Camion c;
c.transporter_marchandise(Marchandise());
// marche car on passe cette fois directement par Camion, sans vouloir
// traiter indifféremment un Camion ou une Voiture. |
Partager