Bonjour les gens,
j'ai une petite question, surement très basique mais là j'ai un peu tout testé et je sèche.
Alors voilà, j'ai 2 classes disons Form1 et Form2 qui dérivent à la fois de la classe Form et d'une interface Calculator définie comme suit:
Code :
- class Calculator {
- public:
- Calculator();
- virtual ~Calculator();
- virtual void calculate()=0 ;
- };
|
Dans mon code, j'ai un objet dont un membre est un Form*parent passé en paramètre du constructeur et qui prend soit une instance Form1 ou Form2.
Dans un traitement de cet objet, je veux appeler la méthode calculate de ce *parent et donc je fais:
Code :
- Calculator* p= (Calculator*)parent;
- p->calculate();
|
Et là, il ne se passe rien. Dans le débugger, je vois bien que l'adresse de p et de parent sont la même, par contre, parent contient plein d'objets alors que p ne contient rien.
Si au contraire, je caste directement en FOrm1, à ce moment là j'ai bien la méthode calculate() de la classe considérée qui s'exécute:
Code :
- Form1* p= (Form1*)parent;
- p->calculate();
|
Mais bon, je ne mettrais pas d'interface si je savais à l'avance quelle classe était utilisée.
Autre chose, si je supprime les constructeurs et destructeurs de mon interface (la rendant ainsi une vraie interface au sens cpp), à l'issue du code ci-dessus avec le cast en (Calculator*), j'ai un joli appel au destructeur de mon Form1, ce qui n'est pas vraiment voulu
Je ne vois pas d'où ça peut venir, dans la mesure où mon p* est par définition un pointeur et qu'il ne devrait pas supprimer l'objet pointé.
Merci de votre aide
---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi