Polymorphisme (question de debutant)

Signaler
Messages postés
3
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
26 août 2004
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
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 ?

4 réponses

Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
je t'ai deja repondu que si tu redefini tu peux plus acceder directement au membre de la classe mere

"Mais il me semblait que la signature d'une fonction en C++ depend du nom ET de ses arguments !!! "

oui, et tu parle la de 2 fonctions qui n'ont pas le meme nom
Messages postés
230
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
4 août 2005

Si tu veux que les fonc' de la CFille soit différéntes de la mère
tu doi faire dans CMère
class CMere
{
public:
virtual int toto (char * var1, int var2);
virtualint toto (char * var1);

CMere();
virtual ~CMere();

};
et ensuite
redéfinir CFille::toto(char*,int) et CFille::toto(char)
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Utilise la surcharge de fonction comme asmanur te l'a indiqué (à l'aide de préfixe virtual)

Shell
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
en fait c'est pas de la surcharge mais de la redefinition