Я пытаюсь выяснить интересную проблему множественного наследования.
Дед и дедушка — это интерфейсный класс с несколькими методами:
class A
{
public:
virtual int foo() = 0;
virtual int bar() = 0;
};
Затем идут абстрактные классы, которые частично дополняют этот интерфейс.
class B : public A
{
public:
int foo() { return 0;}
};
class C : public A
{
public:
int bar() { return 1;}
};
Класс, который я хочу использовать, наследуется от обоих родителей и указывает, какой метод должен исходить откуда с помощью директив использования:
class D : public B, public C
{
public:
using B::foo;
using C::bar;
};
Когда я пытаюсь создать экземпляр D, я получаю ошибки из-за попытки создать экземпляр абстрактного класса.
int main()
{
D d; //<-- Error cannot instantiate abstract class.
int test = d.foo();
int test2 = d.bar();
return 0;
}
Может ли кто-нибудь помочь мне понять проблему и как лучше всего использовать частичные реализации?