Bonjour,
Pour des raisons de compatibilités avec Delphi, C++ Builder a du créer une classe de basse du style VCL, qui donne un fonctionnement différent pour l'utilisation des fonctions virtuelles. Ansi si une Classe de basse appelle une fonction virtuelle, c'est la fonction correspondant à la classe déclarée qui est appelée et non celle de base.... Pour mieux comprendre voir l'exemple.
Pour des raisons de portage vers un autre compilateur (DSP 6713 Texas), je cherche le moyen d'obtenir le meme fonctionnement en C++ standard qu'en C++ avec une classe VCL. C'est a dire faire quelque chose pour que la classe MyBase fonctionne de la meme maniére que la classe MyVCLBase...
D'aprés mes recherche je pense que c'est pas possible, mais si quelqu'un avais une super idée d'astuce, je suis preneur.
Merci de votre aide.
Le résultat de cet exemple est :
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 #include <sysdefs.h> #include <sysutils.hpp> #include <iostream.h> /**************************************/ /**************************************/ // Classes C++ standard /**************************************/ /**************************************/ class MyBase { public: MyBase() { what_am_I(); } virtual void what_am_I() { cout << "Je suis une base" << endl; } }; class MyDerived : public MyBase { public: virtual void what_am_I() { cout << "Je suis dérivée" << endl; } }; /**************************************/ /**************************************/ // Classes de style VCL /**************************************/ /**************************************/ class MyVCLBase : public TObject { public: __fastcall MyVCLBase() { what_am_I(); } virtual void __fastcall what_am_I() { cout << "Je suis une base" << endl; } }; class MyVCLDerived : public MyVCLBase { public: virtual void __fastcall what_am_I() { cout << "Je suis dérivée" << endl; } }; int main(void) { MyDerived *d=new MyDerived; // instantiation de la classe C++ MyVCLDerived *pvd = new MyVCLDerived; // instanciation de la classe de style VCL return 0; }
Je suis une base
Je suis dérivée
Partager