Bonjour,

Je rencontre un problème avec l'héritage, et j'avoue qu'il me dépasse complétement. La situation est très simple : j'ai trois classes appellées PluginsManager, BaseRenderer, et Dummy. Elles sont définies comme suit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
class PluginsManager
{...}; //pour les dll
 
class BaseRenderer : public PluginsManager
{...
 
 void Hello() { MessageBox(NULL,"Hello","Ici",0);}
};
 
 
class Dummy : public PluginsManager
{ }; //diverses fonctions, mais PAS Hello
Puis dans ma DLL, j'ai une fonction register prenant en argument un pointeur sur BaseRenderer :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
DLLEXPORT void register( BaseRenderer* _b )
{
 _b->Hello();
}
que je lance via :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
 
 PluginsManager Pm;
 .. //Initialisations de Pm;
 
 Pm->register( new BaseRenderer() );
Ca fonctionne parfaitement. Mais le problème, c'est que ça fonctionne tout autant si je remplace new BaseRenderer() par new Dummy(), alors que Dummy ne connaît pas du tout de méthode Hello !!!!!

Qu'est-ce qui se passe? Pourquoi est ce que ça fonctionne encore?!

D'une manière générale, est-ce que l'héritage est bien la technique à utiliser dans cette situation? Si non, que proposez-vous?

Merci

Cordialement