[C++] pb virtual

pb virtual [C++] - C++ - Programmation

Marsh Posté le 20-01-2005 à 20:51:29    

J'ai un petit pb avec mes classes
 

Code :
  1. class a
  2. {
  3. ...
  4. public:
  5. virtual void aff();
  6. ...
  7. }
  8. class b:public a
  9. {
  10. ...
  11. public:
  12. virtual void aff();
  13. ...
  14. }
  15. class c: public b
  16. {
  17. ...
  18. public:
  19. void aff();
  20. ...
  21. }
  22. class d: public a
  23. {
  24. ...
  25. public:
  26. void aff();
  27. ...
  28. }


j'ai un une pointeur p de type 'a'.
 
si p pointe une instance a
a.aff() = a::aff();
 
si p pointe une instance b
a.aff() = b::aff();
 
 
Le probleme est ici, je voudrais c::aff();
si p pointe une instance c
a.aff() = b::aff();
 
si p pointe une instance d
a.aff() = d::aff();
 
 
C'est normal que cela ne fonctionne pas?
Une solution?
 
 
 

Reply

Marsh Posté le 20-01-2005 à 20:51:29   

Reply

Marsh Posté le 20-01-2005 à 20:57:21    

c'est fort peu clair

Reply

Marsh Posté le 20-01-2005 à 20:59:18    

qu'est-ce que tu branles avec des classes et des instances avec le même nom ?

Reply

Marsh Posté le 20-01-2005 à 21:18:01    

Taz a écrit :

qu'est-ce que tu branles avec des classes et des instances avec le même nom ?


 
exacte mais ceci n'est qu'un exemple, le a je l'ai pris au hasard ...
 
Voici une meilleur explication (enfin je pense) :)
 

Code :
  1. class composant
  2. {
  3. protected:
  4. int x;
  5. int y;
  6. ...
  7. virtual void aff();
  8. }
  9. //un pannel est en partie un composant
  10. class pannel:composant
  11. {
  12. public:
  13. virtual void aff();
  14. }
  15. //pannel2 est un pannel1 particulier (avec des trucs en plus)
  16. class pannel2:pannel
  17. {
  18. public:
  19. void aff();
  20. }
  21. //un bouton est un composant
  22. class bouton:composant
  23. {
  24. public:
  25. void aff();
  26. }
  27. //ensuite j'ai un tableau contenant des composants
  28. composant *tab[100];
  29. //j'affiche mes composant
  30. (*tab[i]).aff();
  31. //et c'est la qu'il y a un probleme
  32. //un boutton est affiche avec bouton::aff()
  33. //un pannel avec pannel::aff()
  34. //un pannel2 avec pannel::aff()  :( je voudrais pannel2::aff()


Message édité par ffomnislash le 20-01-2005 à 21:29:18
Reply

Marsh Posté le 20-01-2005 à 21:23:40    

et alors ? c'est ça le polymorphisme

Reply

Marsh Posté le 20-01-2005 à 21:24:34    

Taz a écrit :

et alors ? c'est ça le polymorphisme


le probleme c'est que pannel2 ne fait pas appel à la bonne methode je pense


---------------
.
Reply

Marsh Posté le 20-01-2005 à 21:28:39    

didier1809 a écrit :

le probleme c'est que pannel2 ne fait pas appel à la bonne methode je pense


 
ouais voila c'est ca :D

Reply

Marsh Posté le 20-01-2005 à 21:31:54    

ffomnislash a écrit :

ouais voila c'est ca :D


 
et en mettant des virtual partout ? [:joce]


---------------
.
Reply

Marsh Posté le 20-01-2005 à 21:35:25    

didier1809 a écrit :

et en mettant des virtual partout ? [:joce]


 
La methode de barbare  :ouch:  
 
deja essayé et cela ne fonctionne pas :(
 

Reply

Marsh Posté le 20-01-2005 à 21:36:26    

ffomnislash a écrit :

La methode de barbare  :ouch:  
 
deja essayé et cela ne fonctionne pas :(


 
d'ou le smiley  :o  
 
j'ai pas assez de connaissances pour t'aider, dsl  :(


---------------
.
Reply

Marsh Posté le 20-01-2005 à 21:36:26   

Reply

Marsh Posté le 20-01-2005 à 21:40:07    

bon écoute, file du code compilable, parce que là on nage dans tes erreurs et des exemples foireux.

Reply

Marsh Posté le 20-01-2005 à 21:41:00    

sinon y a pas à tortiller : là ou tu penses que ça foire, regarde le type réel de l'object (typeid / dynamic_cast) et là tu verras ce qu'il se passe

Reply

Marsh Posté le 20-01-2005 à 21:56:57    

et tes heritages sont privés [:petrus75]

Reply

Marsh Posté le 20-01-2005 à 22:02:31    

c'est pas une erreur de redéfinir deux fois virtual la même méthode ? une fois suffit dans la classe mère non ? sous gcc ça change rien apparement mais  :??:

Reply

Marsh Posté le 20-01-2005 à 22:24:33    

push a écrit :

c'est pas une erreur de redéfinir deux fois virtual la même méthode ? une fois suffit dans la classe mère non ? sous gcc ça change rien apparement mais  :??:


 
 
virtuel un jour, virtuel toujours ! :o

Reply

Marsh Posté le 20-01-2005 à 22:28:43    

Un intru s'est glissé dans ces propositions. Sauras-tu le retrouver ?
 
1. star d'un jour, star toujours !
2. const un jour, const toujours !
3. static un jour, static toujours !
4. private un jour, private toujours !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed