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 

Héritage d'une variable de classe

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





PostPosted: Thu Nov 11, 2004 9:41 am    Post subject: Héritage d'une variable de classe Reply with quote



Pb : J'ai une classe mère avec une variable de classe et deux classes
filles héritant de cette classe mère. Je pensais que chaque classe
fille aurait sa propre variable de classe indépendante. Eh bien non,
les 3 classes (mère et classes filles) se partagent la même variable.
Il semble qu'en Java c'est pareil.

Contexte : 3 classes avec chacune une variable de classe. Les 3
classes ont des traitements communs agissant sur leur variable de
classe. Je voudrais simplement les regrouper.

Quelles solutions existe-t-il ?
Back to top
Jean-Marc Bourguet
Guest





PostPosted: Thu Nov 11, 2004 12:42 pm    Post subject: Re: Héritage d'une variable de classe Reply with quote



[email]maestric777 (AT) yahoo (DOT) fr[/email] (Jerome Jaglale) writes:

Quote:
Contexte : 3 classes avec chacune une variable de
classe. Les 3 classes ont des traitements communs agissant
sur leur variable de classe. Je voudrais simplement les
regrouper.

Je suppose que ce que tu appelles variables de classe est un
membre statique.

Quote:
Quelles solutions existe-t-il ?

Tu encapsules ces traitements dans une classe template dont
tu hérites. Le paramètre template étant la classe qui doit
avoir le membre statique.

Exemple:

template <typename T>
class IntanceCounter
{
public:
InstanceCounter() { ++ourCounter; }
~InstanceCounter() { ourCounter--; }

void foo() { }
static int getCount() { return ourCounter; }
private:
static int ourCounter;
};

template <typename T> int InstanceCounter<T>::ourCounter = 0;

class Base: public InstanceCounter<Base> {
...
};

class Derived: public Base, public InstanceCounter<Derived> {
...
};

Remarques:
* Base::getCount() retourne le nombre d'instances de Base
et de Derived (parce que Derived herite de Base et donc
de InstanceCounter<Base>. C'est volontaire ici pour
montrer que les effets des constructeurs et destructeurs
peuvent surprendre.

* Derived::getCount() pose un problème: il y en a deux.
Solutions:
- utiliser InstanceCounter<Derived>::getCount();
- ajouter
using InstanceCounter<Derived>::getCount;
dans la zone publique de Derived.

* Ce problème existe existe aussi pour foo. Outre la
solution avec using, on peut faire:
d.InstanceCounter<Derived>::foo()
Pour accéder au foo de la partie base de d,
d.Base::foo()

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
kanze@gabi-soft.fr
Guest





PostPosted: Fri Nov 12, 2004 8:02 am    Post subject: Re: Héritage d'une variable de classe Reply with quote



Jean-Marc Bourguet <jm (AT) bourguet (DOT) org> wrote

Quote:
maestric777 (AT) yahoo (DOT) fr (Jerome Jaglale) writes:

Contexte : 3 classes avec chacune une variable de classe. Les 3
classes ont des traitements communs agissant sur leur variable de
classe. Je voudrais simplement les regrouper.

Je suppose que ce que tu appelles variables de classe est un membre
statique.

Quelles solutions existe-t-il ?

Tu encapsules ces traitements dans une classe template dont tu
hérites.

Pourquoi hériter, et non simplement contenir ?

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Back to top
Jean-Marc Bourguet
Guest





PostPosted: Fri Nov 12, 2004 8:25 am    Post subject: Re: Héritage d'une variable de classe Reply with quote

[email]kanze (AT) gabi-soft (DOT) fr[/email] writes:

Quote:
Jean-Marc Bourguet <jm (AT) bourguet (DOT) org> wrote in message
news:<87bre4tv3k.fsf (AT) news (DOT) bourguet.org>...
[email]maestric777 (AT) yahoo (DOT) fr[/email] (Jerome Jaglale) writes:

Contexte : 3 classes avec chacune une variable de classe. Les 3
classes ont des traitements communs agissant sur leur variable de
classe. Je voudrais simplement les regrouper.

Je suppose que ce que tu appelles variables de classe est un membre
statique.

Quelles solutions existe-t-il ?

Tu encapsules ces traitements dans une classe template dont tu
hérites.

Pourquoi hériter, et non simplement contenir ?

Excellente question. Une partie de la reponse tient en ce que je ne
me la suis pas posee.

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