Polymorphisme (question de debutant)

madlolo2 Messages postés 3 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 26 août 2004 - 26 août 2004 à 12:00
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 - 26 août 2004 à 14:46
Alors la, j'avoue que j'y perds mon latin ...
Regardez ce code :

class CMere
{
public:
int toto (char * var1, int var2);
int toto (char * var1);

CMere();
virtual ~CMere();

};

CMere::CMere()
{
cout << "Constructeur CMere" << endl;
}

CMere::~CMere()
{

}

int CMere::toto(char *var1, int var2)
{

return(1);
}

int CMere::toto(char *var1)
{

return(2);
}

class CFille : public CMere
{
public:
int toto (char *var1);
CFille();
virtual ~CFille();

};

CFille::CFille()
{
cout << "Constructeur CFille" << endl;
}

CFille::~CFille()
{

}

int CFille::toto(char *var1)
{

return(3);
}

void main (void) {

char * c = "coucou!!!";
CFille monobjet;
cout << monobjet.toto(c) << endl;
//cout << monobjet.toto(c,2) << endl; // c'est une erreur !!!!

CMere monobjet2;
cout << monobjet2.toto(c) << endl;
cout << monobjet2.toto(c,2) << endl;

}

Voila donc un code fort simple et qui ne fait pas grand chose :
je redefinit la methode int toto (char*) dans la classe fille CFille.
Or, ce faisant, je cache aussi la methode int toto (char *, int) de la classe mere CMere.
Mais il me semblait que la signature d'une fonction en C++ depend du nom ET de ses arguments !!!
Ou est le probleme ? Y'a forcement une partie de cours que j'ai loupe.
A quoi est ce du ?

3 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
26 août 2004 à 12:21
tu as redefinie une fonction toto dans ta classe fille, tu dois rediriger avec l'orp pour lever l'ambiguitée

cout << monobjet.CMere::toto(c,2) << endl;
0
madlolo2 Messages postés 3 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 26 août 2004
26 août 2004 à 12:35
D'accord pour etre capable d'appeler la methode toto(char *, int) de CMere.
Mais je ne sais toujours pas POURQUOI le fait de redefinir toto(char *) dans CFille me cache toto(char*, int) de CMere.
C'est ca qui me frustre !!
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
26 août 2004 à 14:46
C le but de l'héritage

la fonction redéfinie cache celle de la mere, de l'extérieurs, seule la celle de la fille (la + jeune) doit etre accessible puis, au besoin, on remonte....

Magic Nono: l'informagicien! 8-)
0
Rejoignez-nous