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
#include <iostream>
#include <vector>
 
using namespace std;
 
 
 
                                            // Création des classes
class Vehicules
{
public:
    Vehicules(int prix, int annee) : m_prix(prix), m_anneeConstruction(annee){cout << "Constructeur de vehicule...\n";}
    virtual ~Vehicules() {cout << "Destructeur de vehicule...\n";}
    virtual void afficher();
    virtual void addVehicule();
 
protected:
    int m_prix;
    int m_anneeConstruction;
    vector<Vehicules*>ListeVehicules;
};
                                            // Implémentation des fonctions
void Vehicules::afficher()
    {
        cout <<"Ceci est un vehicule coutant " << m_prix << " euros et fabrique en " << m_anneeConstruction << endl;
    }
 
void Vehicules::addVehicule()
    {
        ListeVehicules.push_back(new Vehicules(*this));
        ListeVehicules[0]->afficher();
        delete ListeVehicules[0];
    }
 
 
int main()
{
 
    Vehicules monVehicule0(10000,2008);
    Vehicules monVehicule1(15000,2010);
    Vehicules monVehicule2(20000,2011);
    monVehicule0.addVehicule();
    monVehicule1.addVehicule();
    monVehicule2.addVehicule();
 
    return 0;
}
Je suis bien entendu débutant, le code que j’ai indiqué ci-dessus compile et fonctionne, mais pas comme on pourrait s’y attendre, enfin comme moi je m’y attendais.
Dans la fonction addVehicule() j’utilise un tableau de pointeurs, membre de la classe Vehicules, ensuite je place une instruction d’affichage en appelant la fonction afficher(), je m’attend donc à obtenir l’affichage de la ligne correspondant à ListeVehicule[0], et finalement j’obtiens l’affichage de tous les objets pointés par le tableau, soit ListeVehicule[0], ListeVehicule[1] et ListeVehicule[2]. Et effectivement il y a bien trois va et vient entre les 2 fonctions, c’est normal me direz-vous il y a 3 appels du main(), ok, mais l’indice du tableau lui reste sur 0, il n’y a aucune boucle d’incrémentation ?
Ma question : qui incrémente l’indice du tableau ? Le Compilo… ?
Et est-ce que mon instruction delete Liste Vehicule[0] fonctionnera t-elle correctement , il semblerait bien que oui, car le destructeur est appelé à chaque passage dans la fonction.
Je vous remercie déjà pour le temps que vous voudrez bien m’accorder à me m’éclairer.