У меня следующая ситуация, на графике представлен график теоретического наследования моих классов:
Идея в основном
1) имеет два абстрактных базовых класса, которые могут быть реализованы на разных платформах (в моем случае две разные операционные системы)
2) позволяют BBase быть прекалибруемым до ABase, чтобы иметь возможность обрабатывать оба одинаково время от времени (например, чтобы хранить экземпляры обоих типов в одном списке).
3) реализовать некоторые общие функции в ABase и BBase.
Теперь, что было бы лучшим способом представить это в C ++? Даже несмотря на то, что он поддерживает множественное наследование, многоуровневое наследование, как это, насколько я знаю, невозможно. Проблема в том, что B наследуется от A и BBase, которые в свою очередь наследуются от ABase. Просто переведя это 1: 1 (следующий код) в C ++, компилятор C ++ (GNU) пожалуется, что ABase :: foo () не реализован в B.
class ABase
{
public:
virtual void foo() = 0;
void someImplementedMethod() {}
};
class BBase : public ABase
{
public:
virtual void bar() = 0;
void someOtherImplementedMethod() {}
};
class A : public ABase
{
public:
A() {}
void foo() {}
};
class B : public A, public BBase
{
public:
B() : A() {}
void bar() {}
};
int main()
{
B b;
return 0;
}
Как бы вы изменили эту модель наследования, чтобы сделать ее совместимой с C ++?
РЕДАКТИРОВАТЬ: Перевернутые стрелки на диаграмме и скорректированы "с понижением частоты" до "с повышением частоты".