В моем классе дизайн я столкнулся следующая проблема:Абстрактный базовый класс головоломка
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();
};
Проблема с выше кода является то, что компилятор будет жаловаться, что AbstraktA :: A() не определено.
Интерфейс A разделяется несколькими объектами. Но реализация A зависит от аргумента шаблона. Интерфейс B является видимым внешним миром и должен быть абстрактом.
Поэтому я хотел бы, что это позволило бы мне определить объект C, как это: Определение интерфейса C унаследованный от АБСТРАКТ А. Определить реализацию C с использованием другого типа данных для шаблона А.
Надеюсь, я поняла. Есть ли способ сделать это, или мне нужно переосмыслить мой дизайн?
Я могу быть глупым, но почему «абстрактные» слова «абстракт». Это намеренно? –
Хе-хе, нет причин вообще. Только результат моего родного языка :) –
Возможный дубликат: http://stackoverflow.com/questions/254673/multiple-inheritance-from-two-derived-classes – Talvalin