Скажем, у нас есть класс, наследующий от двух базовых классов (множественное наследование). База class A
является абстрактной, объявляя чисто виртуальную функцию foo
, другая база class B
объявляет и реализует функцию foo
той же сигнатуры.
struct A
{
virtual void foo(int i) = 0;
};
struct B
{
virtual void foo(int i) {}
};
struct C : public A, public B {};
Я хочу использовать реализацию foo
из базы class B
в моем производном class C
. Однако, если я не реализую функцию foo
во второй раз в своем производном class C
, я не смогу создать экземпляр этого объекта (он остается абстрактным). Виртуальное наследование здесь не помогает, как и ожидалось (class A
и class B
не имеют общего базового класса).
Интересно, есть ли способ "импортировать" реализацию foo
из class B
в class C
, чтобы не повторять один и тот же код.
Приведенный выше пример, конечно, надуман. Причина, по которой я хочу реализовать foo
в class B
, заключается в том, что я хочу получить class D : public B
и использовать class B
s реализацию foo
. Я знаю, что наследование (в первую очередь) не предназначено для повторного использования кода, но я все же хотел бы использовать его таким образом.