C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Relation classe Parent/Enfant et fonctions membres

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
PurL
Guest





PostPosted: Tue Sep 07, 2004 12:17 pm    Post subject: Relation classe Parent/Enfant et fonctions membres Reply with quote



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


Back to top
Jean-Marc Bourguet
Guest





PostPosted: Tue Sep 07, 2004 12:20 pm    Post subject: Re: Relation classe Parent/Enfant et fonctions membres Reply with quote



"PurL" <purl-nospam (AT) chez (DOT) com> writes:

Quote:
class Parent
{
protected:
monobjet *var1;
public:
void ma_fonction()
{
var1->AutreFonction();
}
};

class Enfant : public Parent
{
protected:
monobjet *var2;
public:
void ma_fonction()
{
var2->AutreFonction();
Parent::AutreFonction();
}
};

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++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Back to top
PurL
Guest





PostPosted: Tue Sep 07, 2004 12:33 pm    Post subject: Re: Relation classe Parent/Enfant et fonctions membres Reply with quote



Quote:
Envisager peut-etre en plus de mettre ma_fonction en virtuel.

Ca change rien Sad
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



Back to top
Jean-Marc Bourguet
Guest





PostPosted: Tue Sep 07, 2004 12:38 pm    Post subject: Re: Relation classe Parent/Enfant et fonctions membres Reply with quote

"PurL" <purl-nospam (AT) chez (DOT) com> writes:

Quote:
Envisager peut-etre en plus de mettre ma_fonction en virtuel.

Ca change rien Sad

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++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Back to top
Falk Tannhäuser
Guest





PostPosted: Tue Sep 07, 2004 12:58 pm    Post subject: Re: Relation classe Parent/Enfant et fonctions membres Reply with quote

Jean-Marc Bourguet wrote:
Quote:
class Parent
{
protected:
monobjet *var1;
public:
void ma_fonction()
{
var1->AutreFonction();
}
};

class Enfant : public Parent
{
protected:
monobjet *var2;
public:
void ma_fonction()
{
var2->AutreFonction();

Parent::AutreFonction();

Plutôt
Parent::ma_fonction();
(qui appellera 'var1->AutreFonction()' - du coup, 'var1'
pourrait même être 'private' au lieu d'être 'protected'.

Quote:

}
};

Falk

Back to top
Jean-Marc Bourguet
Guest





PostPosted: Tue Sep 07, 2004 1:02 pm    Post subject: Re: Relation classe Parent/Enfant et fonctions membres Reply with quote

Falk Tannhäuser <falk.tannhauser (AT) crf (DOT) canon.fr> writes:

Quote:
Jean-Marc Bourguet wrote:
class Parent
{
protected:
monobjet *var1;
public:
void ma_fonction()
{
var1->AutreFonction();
}
};

class Enfant : public Parent
{
protected:
monobjet *var2;
public:
void ma_fonction()
{
var2->AutreFonction();
Parent::AutreFonction();

Plutôt
Parent::ma_fonction();
(qui appellera 'var1->AutreFonction()' - du coup, 'var1'
pourrait même être 'private' au lieu d'être 'protected'.

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++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Back to top
PurL
Guest





PostPosted: Tue Sep 07, 2004 1:02 pm    Post subject: Re: Relation classe Parent/Enfant et fonctions membres Reply with quote

Quote:
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.

Oui c'est vrai...

Quote:

La solution etait au-dessus: ajouter
Parent::AutreFonction();
dans Enfant::ma_fonction().

J'avais pas vu, c'est effectivement une solution pour obtenir le résultat
souhaité mais pas la méthode souhaitée. En effet, je souhaite quelque chose
d'automatique, c'est pas tres efficace de devoir tout réécrire. Image (et
c'est le cas) que j'ai plusieurs variable à chaque niveau d'héritage et
plusieur niveau d'héritage, ca devient vite l'usine à gaz...

Il faudrait qu'il se produit le meme mécanisme que pour les construteurs par
défaut :
qd on créé une classe Enfant, son constructeur par défaut et celui de la
classe Parent sont appelés.

PurL



Back to top
Jonathan Mcdougall
Guest





PostPosted: Wed Sep 08, 2004 6:01 am    Post subject: Re: Relation classe Parent/Enfant et fonctions membres Reply with quote

Quote:
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.

Du code vaut parfois mille mots...

Quote:
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;

Les données protégées sont habituellement du mauvais design.

Quote:
public:
void ma_fonction()
{
var1->AutreFonction();
}
};

class Enfant : public Parent
{
protected:
monobjet *var2;
public:
void ma_fonction()
{

Parent::ma_fonction();

Quote:
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,

C'est impossible de le faire automatiquement, à moins de faire quelque chose

class Parent
{
private:
monobject *o;

protected:
virtual void ma_fonction_impl() = 0;

public:
void ma_fonction()
{
o->f();

ma_fonction_impl();
}

};


class Enfant : public Parent
{
private:
monobject *o2;

protected:
void ma_fonction_impl()
{
o2->f();
}
};


int main()
{
Enfant e;
e.ma_fonction(); // appelle Parent::ma_fonction
// qui appelle
// Enfant::ma_fonction_impl()

}

Ceci laisse la place à d'autres classes dérivées. Si tu as plusieurs
couches, tu devras répéter ce système pour chacune.


Jonathan Mcdougall
Montréal, Québec



Back to top
Arnaud Debaene
Guest





PostPosted: Wed Sep 08, 2004 8:39 am    Post subject: Re: Relation classe Parent/Enfant et fonctions membres Reply with quote

PurL wrote:

Quote:
La solution etait au-dessus: ajouter
Parent::AutreFonction();
dans Enfant::ma_fonction().

J'avais pas vu, c'est effectivement une solution pour obtenir le
résultat souhaité mais pas la méthode souhaitée. En effet, je
souhaite quelque chose d'automatique, c'est pas tres efficace de
devoir tout réécrire. Image (et c'est le cas) que j'ai plusieurs
variable à chaque niveau d'héritage et plusieur niveau d'héritage, ca
devient vite l'usine à gaz...
Tu ne dois écrire qu'une seule fois l'appel à la méthode de la classe de

base, dans la méthode de la classe dérivée, et ce pour chaque niveau de ta
hiérarchie. Je ne vois pas d'usine à gaz là dedans : c'est exactement la
même chose quand tu appelles un constucteur avec paramètres de ta classe de
base depuis le constructeur de la classe dérivée (sauf que tu le fais dans
la liste d'initialisation, pas dans le corps du constructeur).

Arnaud



Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.