Скажем, у нас есть класс, наследующий от двух базовых классов (множественное наследование). База class A
является абстрактной, объявляя чистую виртуальную функцию foo
, другая база class B
объявляет и реализует функцию foo
той же самой подписи.«import» определение функции из базового класса для реализации абстрактного интерфейса (множественное наследование в C++)
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
. Я знаю, что наследование не (в первую очередь) предназначено для повторного использования кода, но я все равно хотел бы использовать его таким образом.
Это звучит как жизнеспособный вариант, по крайней мере, спасибо! – kynan