| 12
 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
 
 | #include <iostream>
#include <string>  
# include <vector> 
#include "Vehicule.h"
#include "Voiture.h"
#include "Moto.h"
#include "Camion.h"
 
using namespace std;
 
int main()
{
  /* je crée un tableau dynamique de véhicules où je mettrai tous les véhicules dont je dispose en ces trois classes-filles: voitures, motos, camions: */
    vector<Vehicule*> listeVehicules;
// je mets mes véhicules:
  listeVehicules.push_back (new Voiture(12500,4,2002,150,"Land-Rover", " Tout-terrain ",3, "bleu-nuit"));
  /* A) ci-dessus => erreur: no matching function for call to 'Voiture::Voiture
  (int,int,int,int, const char [11], const char [15], int, const char[10])'
  listeVehicules.push_back (new Voiture(6000,4,2005, 150,"New-Beetle","cabriolet",2, "bleu-nuit,"));
  // même erreur que A)
  listeVehicules.push_back (new Voiture(35000,5,200,2006,"Range-Rover","Premium",5,"blanc"));
  // même erreur A)
  // et rajouter pour les motos la valeur de m_cylindree()
  listeVehicules.push_back (new Moto(1100,2,2010,95,"Kawasaki",125));
  /* erreur A'): idem que A mais avec call to 'Moto::Moto(... plus qu'il dit:
  candidate expects 0 argument, 6 provided */
  listeVehicules.push_back (new Moto(10000,2,2004,150,"Harley-Davidson",2400));
  // erreur A')
  // et rajouter pour les camions int m_tonnage
  listeVehicules.push_back (new Camion(3000,4,2000,130,"Combi-VW",2));
  /* ereur A": idem que A) mais avec call to 'Camion::Camion... plus qu'il dit:
  candidate expects 0 argument, 6 provided... ah bon, il en attend 0? */
  listeVehicules.push_back (new Camion(50000,12,2001,145,"Mercedes",18));
  // erreur A")
 
  // une fois la collection définie, le job par lui-même: 
  int choix(0);
    cout << "Que souhaitez-vous ?" << endl;
    cout << "1. Une moto" << endl;
    cout << "2. Une voiture" << endl;
    cout << "3. Un camion" << endl;
 
    cin >> choix;
 
    switch(choix)
       {
        case 1:
          // Moto
            {
             // le proto de la méthode affiche est dans Vehicule.h en virtual
             (listeVehicules[4])-> affiche(); /* utilisation de la fonction
              * affiche() pour le pointeur de la case 4 qui doit correspondre à la Harley */
            }
          break;
 
      case 2:
          // Voiture
          {
           (listeVehicules[1])->affiche(); // pour la Beetle
          }
          break;
 
      case 3:
          // Camion
          {
           (listeVehicules[6])->affiche(); // le camion Mercedes
          }
          break;
 
      default:
          cout << "Entrée invalide" << endl;
          break;
  }
 
  for (int i(0); i<listeVehicules.size(); ++i) /* attention: comparaison entre
    des expressions entières signée et non signée: ça veut dire quoi, ça ??? */
  {
    delete listeVehicules[i]; 
    /* attention: deleting object of polymorphic class type 'Vehicule' which has
    non virtual-destructor might cause undefined behaviour */
    listeVehicules[i] = 0; // on met le pointeur à zéro
  }
 
  return 0;
} | 
Partager