Estoy tratando de definir tipos de interfaz en C++ utilizando clases abstractas y ponerlas en práctica con clases concretas. El problema al que me estoy enfrentando es que no puedo heredar ni interconectar desde otra interfaz y heredar la implementación desde una clase concreta base.Implementación de interfaces en C++ con clases concretas heredadas
Mi objetivo es ser capaz de definir una jerarquía de interfaces que pueden heredar de interfaces base menos complejas. También quiero ser capaz de extender la implementación de interfaces heredando de clases concretas (como heredar de TObjectA en el ejemplo a continuación).
Esto es lo que tengo. El error que obtengo es "objeto de tipo de clase abstracta" TObjectB "no está permitido". Creo que sé por qué, que es porque no implementé MethodA() en TObjectB. Pero lo que realmente quiero es tener la implementación provista por una clase base (TObjectA) y aún tener jerarquías de interfaz (IInterfaceB hereda de IInterfaceA). Tampoco quiero repetir todos los métodos de interfaz heredados en mis clases de concreate derivadas. ¿Cómo puedo hacer esto?
class IInterfaceA
{
public:
virtual void MethodA() = 0;
};
class IInterfaceB : IInterfaceA
{
public:
virtual void MethodB() = 0;
};
class TObjectA : public IInterfaceA
{
public:
void MethodA() { cout << "Method A"; }
};
class TObjectB : public TObjectA, public IInterfaceB
{
public:
void MethodB() { cout << "Method B"; }
};
void TestInterfaces()
{
IInterfaceB* b = new TObjectB(); // error: object of abstract class type "TObjectB" is not allowed
b->MethodB();
delete b;
}
Necesita clases base virtuales. P.ej. [mira aquí] (http://stackoverflow.com/questions/4605556/when-virtual-inheritance-is-a-good-design/4606206#4606206) –