Salut à tous!!!!!
Voila donc mon problème: j'ai deux classes B et C qui héritent de la classe A.
J'ai besoin à l'interieur de méthodes de B et C de tester le type d'un A* de cette manière : a1->memeType(a2) (renvoie un bool). Le type de a2 peut être connu puisque l'on se trouve dans la classe B ou C, le type de a1 est inconnu et donc considéré par defaut comme A (d'où l'utilisation de virtual)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class A {
public:
virtual bool memeType(const A* a) const = 0;
}
class B : public A {
public:
bool memeType(const A* a) {return false;}
bool memeType(const B* b) {return true;}
}
class C : public A {
public:
bool memeType(const A* a) {return false;}
bool memeType(const C* c) {return true;}
} |
Comme on peut le voir, dans la classe mère A il n'y a que l'objet (this) pour lequel on arrive à differencier le type. Le 2eme paramètre est déclaré en A* alors que l'on veut déceler si en réalité c'est un A*, B* ou C* (sans mentioner B et C dans la classe A ....
Dans notre cas, la méthode appellée est toujours :
bool B::memeType(const A* a) {return false;}
ou
bool C::memeType(const A* a) {return false;}
L'idéal serait d'avoir ce paramètre en virtual également ... est ce possible ?
Sinon, existe-t-il une autre solution ?
Important (rappel) ! Je ne peux pas ajouter les prototypes :
bool A::memeType(const B* b) {return true;}
bool A::memeType(const C* c) {return true;}
Merci d'avance!!!
Partager