 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
jean-luc Biord Guest
|
Posted: Wed Jun 09, 2004 7:53 pm Post subject: Trouver le nom d'une classe |
|
|
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
|
Posted: Wed Jun 09, 2004 9:12 pm Post subject: Re: Trouver le nom d'une classe |
|
|
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
|
Posted: Thu Jun 10, 2004 12:29 am Post subject: Re: Trouver le nom d'une classe |
|
|
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 |
|
 |
|
|
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
|
|