Bonjour,
Je rencontre un problème dans le programme suivant :
Code :
- #include <iostream>
- #include <list>
- using namespace std;
- class Article
- {
- public :
-
- Article() {}
- virtual void tva()
- {
- cout << "tva = " << 19.6 << endl;
- }
- private :
- };
- class Livre : public Article
- {
- public :
-
- void tva()
- {
- cout << "tva = " << 5.5 << endl;
- }
-
- private :
- };
- class Medicament : public Article
- {
- public :
-
- void tva()
- {
- cout << "tva = " << 2.1 << endl;
- }
-
- private :
- };
- int main()
- {
- list<Article> lart;
- list<Article>::iterator it;
- Livre article0;
- Medicament article1;
-
- lart.push_back(article0);
- lart.push_back(article1);
- it = lart.begin();
- it->tva(); // Affiche 19.6 !!
- it++;
- it->tva(); // Affiche 19.6 !!
- };
|
Comme indiqué, la méthodes tva() appliquée aux deux objets de la liste d'article renvoie 19.6, malgré la virtualité de la méthode tva() qui, je l'espérais, allait conduire à appliquer la méthode tva() propre à chacun des deux objets (soit 5.5 pour les livres et 2.1 pour les médicaments). Pourriez-vous m'indiquer d'où vient le problème et comment forcer le programme à appliquer la méthode propre à chacune des classes, sans faire appel à la méthode de la classe parent (mais en continuant à travailler avec les éléments d'une liste !).
Est-ce un problème avec l'utilisation du polymorphisme ?
D'avance merci