Dans ma conception de classe, je suis tombé sur le problème suivant:Classe de base abstraite casse-tête
class MyData
{
int foo;
};
class AbstraktA
{
public:
virtual void A() = 0;
};
class AbstraktB : public AbstraktA
{
public:
virtual void B() = 0;
};
template<class T>
class ImplA : public AbstraktA
{
public:
void A(){ cout << "ImplA A()"; }
};
class ImplB : public ImplA<MyData>, public AbstraktB
{
public:
void B(){ cout << "ImplB B()"; }
};
void TestAbstrakt()
{
AbstraktB *b = (AbstraktB *) new ImplB;
b->A();
b->B();
};
Le problème avec le code ci-dessus est que le compilateur se plaindra AbstraktA :: A() n'est pas défini.
Interface A est partagée par plusieurs objets. Mais l'implémentation de A dépend de l'argument template. L'interface B est vue par le monde extérieur et doit être abstrakt.
La raison pour laquelle je voudrais ceci est que cela me permettra de définir l'objet C comme ceci: Définir C d'interface héritant de abstrakt A. Définir la mise en œuvre de C en utilisant un autre type de données pour le modèle A.
J'espère que je suis clair. Y a-t-il un moyen de le faire, ou dois-je repenser mon design?
Je peux être stupide, mais pourquoi "abstrait" épelé "abstrakt". Est-ce intentionnel? –
Hé, pas de raison du tout. Juste un résultat de ma langue maternelle :) –
double possible de: http://stackoverflow.com/questions/254673/multiple-inheritance-from-two-derived-classes – Talvalin