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 

Trouver le nom d'une classe

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





PostPosted: Wed Jun 09, 2004 7:53 pm    Post subject: Trouver le nom d'une classe Reply with quote



Bonjour, voici mon problème:
Dans le programme suivant tout fonctionne bien. La constructeur appelle
une fonction de la classe qui l'appelle.

class A
{
public:
void retour() { };
};

class C
{
public:
C::C( A *p);
private:
A *parent;
};

C::C( A *p ) : parent(p)
{
parent->retour();
}

void main()
{
A *a = new A();
C *c = new C(a);
}

Voici ce que je voudrais réussir à faire:
Avec une autre classe B, que C puisse appeller la fonction retour() de A
ou de B sans spécifier le nom de la classe parent dans le constructeur :

class A
{
public:
void retour() { };
};

class B
{
public:
void retour() { };
};

class C
{
public:
C::C( Generique *p);
private:
Generique *parent;
};

C::C( Generique *p ) : parent(p)
{
parent->retour();
}

void main()
{
A *a = new A();
B *b = new B();
C *c = new C(a);
C *c2 = new C(b);
}

Oui mais ça ne compile pas, que faire ?
merci
Back to top
Twxs
Guest





PostPosted: Wed Jun 09, 2004 9:12 pm    Post subject: Re: Trouver le nom d'une classe Reply with quote



jean-luc Biord wrote:

Quote:
Bonjour,
bonjour
Voici ce que je voudrais réussir à faire:
Avec une autre classe B, que C puisse appeller la fonction retour() de A
ou de B sans spécifier le nom de la classe parent dans le constructeur :

il faut utiliser les methodes virtuelles

et faire heriter les classes A et B d'une classe commune
(servant d'interface) ici nommee Generic possedant la methode
retour.


class Generic{
public:
virtual void retour() =0;
};

le = 0 signifie que la methode est virtuelle pure
i.e. chaque classe heritant de Generic *doit* implementer
la methode retour. le mettre uniquement virtuelle permet de
specifier un comportement par defaut.



Quote:
class A
: public Generic
{
public:
void retour() { };
};

class B
: public Generic
{
public:
void retour() { };
};

class C
{
public:
C::C( Generique *p);
private:
Generique *parent;
};

C::C( Generique *p ) : parent(p)
{
parent->retour();
}

void main()
{
A *a = new A();
B *b = new B();
C *c = new C(a);
C *c2 = new C(b);
}



Twxs

Back to top
drkm
Guest





PostPosted: Thu Jun 10, 2004 12:29 am    Post subject: Re: Trouver le nom d'une classe Reply with quote



Twxs <Twxs (AT) free (DOT) fr> writes:

Quote:
jean-luc Biord wrote:

Voici ce que je voudrais réussir à faire:
Avec une autre classe B, que C puisse appeller la fonction retour()
de A ou de B sans spécifier le nom de la classe parent dans le
constructeur :

il faut utiliser les methodes virtuelles
et faire heriter les classes A et B d'une classe commune

Ca dépend. Le PO peut également employer un modèle de classe. Ses
classes A et B ont elles réellement un lien de parenté ? D'après le
nom qu'il donne à la classe dans l'illustration de ce qu'il veut
faire, `Generique', je pencherais même plutôt pour le modèle de
classe. Mais il n'y a que lui qui sait, pour l'instant.

Sinon, pour une idée du modèle de classe :

template< class Generique >
class C
{
public:
C::C( Generique * p ) ;
private:
Generique * parent ;
} ;

Mais si tout cela t'est étranger (le PO), et les templates, et
l'héritage, je te conseille d'investir un peu d'argent dans un bon
bouquin C++ et un peu de temps dans sa lecture.

--drkm

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.