Relation classe Parent/Enfant et fonctions membres
Le
PurL
Bonjour,
Soit une classe Parent qui possede une variable membre nommée var1 et une
fonction membre nommée ma_fonction qui travaille sur var1.
Soit une classe Enfant dérivée de Parent qui possede une variable membre
nommée var2 et la variable héritée de Parent var1.
Enfant possède aussi ma_fonction par héritage.
Je voudrais réécrire ma_fonction au sein de Enfant car il faut travailler
sur var2, mais je voudrais aussi qu'en appelant Enfant::ma_fonction() cela
déclenche l'appel de la fonction Parent::ma_fonction() pour effectuer le
travail sur var1.
Je créé Enfant car je veux spécialiser/préciser la classe Parent mais tout
le travail qu'effectue Parent doit etre repporté dans Enfant (ca me parait
normal comme souhait)
ex:
class Parent
{
protected:
monobjet *var1;
public:
void ma_fonction()
{
var1->AutreFonction();
}
};
class Enfant : public Parent
{
protected:
monobjet *var2;
public:
void ma_fonction()
{
var2->AutreFonction();
}
};
//application
void Fonction()
{
Enfant enfant;
enfant.ma_fonction();
//je voudrais que var1->AutreFonction() et var2->AutreFonction() soit
appellée
//car apres tout var1 appartient à enfant
}
Merci de m'expliquer comment établir ce mécanisme,
PurL
Soit une classe Parent qui possede une variable membre nommée var1 et une
fonction membre nommée ma_fonction qui travaille sur var1.
Soit une classe Enfant dérivée de Parent qui possede une variable membre
nommée var2 et la variable héritée de Parent var1.
Enfant possède aussi ma_fonction par héritage.
Je voudrais réécrire ma_fonction au sein de Enfant car il faut travailler
sur var2, mais je voudrais aussi qu'en appelant Enfant::ma_fonction() cela
déclenche l'appel de la fonction Parent::ma_fonction() pour effectuer le
travail sur var1.
Je créé Enfant car je veux spécialiser/préciser la classe Parent mais tout
le travail qu'effectue Parent doit etre repporté dans Enfant (ca me parait
normal comme souhait)
ex:
class Parent
{
protected:
monobjet *var1;
public:
void ma_fonction()
{
var1->AutreFonction();
}
};
class Enfant : public Parent
{
protected:
monobjet *var2;
public:
void ma_fonction()
{
var2->AutreFonction();
}
};
//application
void Fonction()
{
Enfant enfant;
enfant.ma_fonction();
//je voudrais que var1->AutreFonction() et var2->AutreFonction() soit
appellée
//car apres tout var1 appartient à enfant
}
Merci de m'expliquer comment établir ce mécanisme,
PurL

Poser une question


Envisager peut-etre en plus de mettre ma_fonction en virtuel.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++...index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Ca change rien :(
apparement, quand, dans la classe Enfant, on redéfini ma_fonction, celle ci
remplace/masque celle de Parent. Le plus surprenant c'est que si on définit
dans Enfant une autre fonction de meme nom avec des paramètres différents
(une surcharge), cette nouvelle fonction masquera aussi celle de Parent !!
(la je vois pas pourquoi)
PurL
Ce n'etait qu'une suggestion sur la conception parce que si j'en crois
mon experience la plupart des membres qu'on veut modifier dans une
classe descendante sont generallement virtuels.
La solution etait au-dessus: ajouter
Parent::AutreFonction();
dans Enfant::ma_fonction().
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++...index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Plutôt
Parent::ma_fonction();
(qui appellera 'var1->AutreFonction()' - du coup, 'var1'
pourrait même être 'private' au lieu d'être 'protected'.
Falk
Exact; et je crains avoir recommis la meme erreur dans un autre
message.
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++...index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org