Bonjour à toutes et à tous,
Je débute en C++, et je souhaiterais savoir comment appeler la bonne fonction lorsque je déclare un membre de classe d'un type 'Base' (superclasse) et que je lui assigne une sous-classe dérivée.
Une illustration:
avec:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 Class Animal {}; Class Chat:public Animal{ public: foo_chat(); }; Class Chien:public Animal{ public: foo_chien(); }; Class Simulation { private: Animal mon_animal; Un_type_sympa T; public: int main(void){ mon_animal = Chat(); T.compte_les_poils_de(mon_animal); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class Un_type_sympa{ public: int compte_les_poils_de(Animal a) {return 0}; int compte_les_poils_de(Chien a) {return 10}; int compte_les_poils_de(Chat a) {return 20}; };
Dans mon exemple, c'est toujours 0 qui est retourné par compte_les_poils_de(), ce qui est normal, vu que mon_animal est déclaré en tant que Animal, mais comment faire pour que Un_type compte le bon nombre de poils en fonction de la classe (Chien, Chat?). Je peux m'en sortir par des conditions if else, et caster mais je suis certain qu'une solution plus élégante existe. J'ai regardé les fonctions virtuelles, les pointeurs, etc. mais je n'ai pas réussi à faire fonctionner comme il faut.
Merci!
Partager