Hoï ! En ce moment j'étudie l'héritage, et donc avec ça, le polymorphisme.
Seulement voilà, je n'arrive pas à faire de résolution de lien, à chaque fois c'est la méthode de la classe mère qui est appelée. Pourtant cette fonction est bien virtuelle et j'utilise un pointeur.
Voici le code :
test.h :
test.cpp :
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
48
49
50
51
52
53
54
55
56 #ifndef TEST_H_INCLUDED #define TEST_H_INCLUDED #include <iostream> class Vehicule { public: int getAnneeConstr() const; virtual void afficher() const; int getRoues() const; Vehicule(); Vehicule(int a); Vehicule(int a,int b); virtual ~Vehicule(); protected: int m_prix; int m_anneeDeConstruction; }; class Voiture:public Vehicule { public: void afficher() const; int roues() const; Voiture(); Voiture(int a,int b,int c); private: int m_portes; }; class Moto:public Vehicule { public: void afficher() const; int roues() const; Moto(); Moto(double a,int b,int c); private: double m_vitesseMax; }; class Camion:public Vehicule { public: void afficher() const; int roues() const; Camion(); Camion(double a,int b,int c); private : double m_poidsMax; }; void afficheVehicule(Vehicule const& a); #endif // TEST_H_INCLUDED
main.cpp :
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
48
49
50
51
52
53
54 #include <iostream> #include "test.h" using namespace std; void afficheVehicule(Vehicule const& a) { a.afficher(); } Vehicule::Vehicule():m_prix(5000),m_anneeDeConstruction(2000){} Vehicule::Vehicule(int a,int b):m_prix(a),m_anneeDeConstruction(b){} Vehicule::~Vehicule(){}; void Vehicule::afficher() const { cout<<"Ceci est un vehicule coutant "<<m_prix<<" euros."<<endl; } int Vehicule::getAnneeConstr() const { return m_anneeDeConstruction; } Voiture::Voiture():m_portes(2){} Voiture::Voiture(int a,int b,int c):Vehicule(b,c),m_portes(a){} void Voiture::afficher() const { cout<<"Ceci est une voiture coutant "<<m_prix<<" euros et ayant "<<m_portes<<" portes."<<endl; } int Voiture::roues() const { return 4; } Moto::Moto():m_vitesseMax(100){} Moto::Moto(double a,int b,int c):Vehicule(b,c),m_vitesseMax(a){} void Moto::afficher() const { cout<<"Ceci est une moto coutant "<<m_prix<<" euros et montant jusqu'a "<<m_vitesseMax<<" km/h."<<endl; } int Moto::roues() const { return 2; } Camion::Camion():m_poidsMax(38){} Camion::Camion(double a,int b,int c):Vehicule(b,c),m_poidsMax(a){} void Camion::afficher() const { cout<<"Ceci est un camion coutant "<<m_prix<<" euros et pouvant porter jusqu'a "<<m_poidsMax<<" tonnes."<<endl; } int Camion::roues() const { return 10; }
Est-ce que c'est le fait d'avoir utilisé un tableau qui pose problème ? Ou alors j'utilise mal le pointeur ?
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
48
49
50
51
52
53 #include <iostream> #include <vector> #include "test.h" using namespace std; int main() { string reponse; double b; int c,d,answer; Vehicule* ptr(NULL); vector<Vehicule>garage(0); cout<<"Ajouter un vehicule ?"<<endl; cin>>reponse; while(reponse=="oui" || reponse=="OUI" || reponse=="Oui") { cout<<"1:Voiture ; 2:Moto ; 3:Camion"<<endl; cin>>answer; switch(answer) { case 1: cout<<"nbrPortes prix anneeDeConstruction"<<endl; cin>>b>>c>>d; garage.push_back(Voiture(b,c,d)); break; case 2: cout<<"vitesseMax prix anneeDeConstruction"<<endl; cin>>b>>c>>d; garage.push_back(Moto(b,c,d)); break; case 3: cout<<"poidsMax prix anneeDeConstruction"<<endl; cin>>b>>c>>d; garage.push_back(Camion(b,c,d)); break; default: cout<<"prix anneeDeConstruction"<<endl; cin>>c>>d; garage.push_back(Vehicule(c,d)); break; } for(int i(0);i<(int)garage.size();i++) { ptr=&garage[i]; ptr->afficher(); } cout<<"Ajouter un vehicule ?"<<endl; cin>>reponse; } return 0; }
À noter que j'ai aussi essayé en utilisant une référence avec cette fonction :Sans plus de résultat. À chaque fois la boucle l.44-48 de main.cpp m'affiche tout comme si le tableau ne contenait que des Vehicule.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void afficheVehicule(Vehicule const& a) { a.afficher(); }
Merci d'avance pour votre aide !
Partager