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.
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; }
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.
Partager