Je développe une DLL C++ contenant trois classes: classe de base Base
, Derived1
et classe Derived2
. Le scénario:Instance de classe de base unique
class Base
{
//ctor, dtor, members and methods here
}
class Derived1 : public Base
{
//ctor, dtor, members and methods here
}
class Derived2 : public Base
{
//ctor, dtor, members and methods here
}
Le dll que je crée avec MS VC 2008 Express, que je veux utiliser sous TURBOC++ (borland: très bon ide/rad).
J'exporte Derived1
via la méthode facotry et, via le code client Derived1
, crée des instances de Derived2
. Les deux Derived1
et Derived2
partagent une fonction de pointeur contenue dans une autre DLL, donc j'ai mis cette fonction de pointeur sous la classe de base.
Voici le problème. Une fois que je crée une instance (par l'usine) de Derived1
et qu'il peut créer plusieurs instances de Derived2
, le constructeur de classe Base
est appelé plusieurs fois (1 pour Derived1
et plusieurs fois pour Derived2
).
Comment puis-je empêcher plusieurs entrées de Base?
Une autre question:
Avec le scénario que je décrit plus haut, Derived1
appeler plusieurs intances de Derived2
et à la fois Derived1
et Derived2
étend la classe unique base commune. Je demande: C'est un mauvais design? Existe-t-il une autre conception des classes et de leur hiérarchie d'héritage mieux que ce que j'ai utilisé?
Comme tous les cas de dérivés * est à la base :: Base() ctor une instance de Base, vous ne pouvez pas vraiment empêcher plusieurs instances de Base, car vous en avez absolument besoin. Neil a absolument raison de faire de la fonctionPtr static pour résoudre votre problème. – AndreasT