Polymorphisme sans succès
Bonjour,
J'ai une classe étudiant qui contient des cours dans un vecteur
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
class Etudiant
{
public:
Etudiant (int noEtudiant,
const std::string& nom,
const std::string& prenom);
int reqnoEtudiant() const;
std::string reqNom() const;
std::string reqPrenom() const;
// nouveaux
void ajouterCours (const Cours& nouveauCours);
std::string reqReleves() ;
~Etudiant();
private:
int m_noClient;
std::string m_nom;
std::string m_prenom;
std::vector<Cours*> m_vCours;
}; |
La classe cours virtuelle pure
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
class Cours
{
public:
Cours (unsigned int noCours,
double note);
std::string reqCoursFormate() const;
virtual Cours* clone() const=0;
private:
unsigned int m_noCours;
double m_note;
}; |
Classe Math qui hérite de cours
Code:
1 2 3 4 5 6 7 8 9 10 11
|
class Math : public Cours
{
public:
Math (unsigned int noCours,
double note);
std::string reqCoursFormate() const;
virtual Cours* clone() const;
}; |
Dans la classe cours voici le code pour afficher le contenu
Code:
1 2 3 4 5 6 7 8
|
std::string Cours::reqCoursFormate() const
{
ostringstream os;
os << "Numero : " << reqNoCompte() << endl
<< "Note : " << reqNote() << endl;
return os.str();
} |
Dans la classe math voici le code pour afficher le contenu
Code:
1 2 3 4 5 6 7 8
|
std::string Math::reqCoursFormate() const
{
ostringstream os;
os << "Cours Math" << endl
<< Cours::reqCompteFormate() << endl;
return os.str();
} |
Dans mon étudiant, quand j'ajoute un cours
Code:
1 2
|
m_vCours.push_back(nouveauCours.clone()); |
J'essais d'afficher le contenu en bouclant de la facon suivante
Code:
cout << m_vCours[i]->reqCoursFormate();
Si je crée un objet math, c'est toujours la méthode du cours qui est appelé et jamais celle de math.
Qqn sait pourquoi ?
Merci de votre aide.