que tiene la siguiente situación, en la foto es el gráfico de la herencia teórica de mis clases:herencia de interfaces similares en C++
La idea es, básicamente, a
1) tienen dos clases base abstractas que se puede implementar en diferentes plataformas (en mi caso, dos sistemas operativos diferentes)
2) permiten que BBase se pueda colar por colada a ABase para poder manejar ambos igualmente a veces (por ejemplo, para contener instancias de ambos tipos) en una lista).
3) implementan ciertas funciones comunes en ABase y BBase.
Ahora, ¿cuál sería la mejor manera de representar esto en C++? A pesar de que admite una herencia múltiple, no es posible heredar varios niveles como este. El problema es que B hereda de A y BBase, que a su vez heredan de ABase. Simplemente traducir 1: 1 (siguiente código) en C++, un compilador de C++ (GNU) se quejan de que Abase :: foo() no está implementado en 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ómo cambiar este modelo de herencia de hacer es compatible con C++?
EDIT: Flechas invertidas en el diagrama y corregidas "down-convertible" en "up-convertible".
"¿Por qué no se puede colar a ABase?" te refieres a que se puede colar, ¿no? –
Sí, gracias por la pista. Lo mismo ocurre con las flechas en el diagrama. – Johannes