En C++, ¿es posible tener una base más una clase derivada que implemente una única interfaz?C++: Derivado + clase base ¿implementar una sola interfaz?
Por ejemplo:
class Interface
{
public:
virtual void BaseFunction() = 0;
virtual void DerivedFunction() = 0;
};
class Base
{
public:
virtual void BaseFunction(){}
};
class Derived : public Base, public Interface
{
public:
void DerivedFunction(){}
};
void main()
{
Derived derived;
}
Esta falla porque Derivado no puede ser instanciada. En lo que respecta al compilador, Interface :: BaseFunction nunca se define.
Hasta ahora la única solución que he encontrado sería declarar un pase a través de la función derivada
class Derived : public Base, public Interface
{
public:
void DerivedFunction(){}
void BaseFunction(){ Base::BaseFunction(); }
};
¿Hay alguna solución mejor?
EDIT: si importa, aquí es un problema del mundo real que había utilizando cuadros de diálogo MFC.
Tengo una clase de diálogo (MyDialog dice) que se deriva de CDialog. Debido a problemas de dependencia, necesito crear una interfaz abstracta (MyDialogInterface). La clase que usa MyDialogInterface necesita usar los métodos específicos de MyDialog, pero también necesita llamar a CDialog :: SetParent. Lo resolví creando MyDialog :: SetParent y haciéndolo pasar a CDialog :: SetParent, pero me preguntaba si habría una forma mejor.
Si lo hace de esa manera, entonces no necesita la segunda declaración de BaseFunction. – Torlack
Es lo que escribió. No quería cambiarlo. Él podría tener una razón para digerir así –
. He hecho un comentario sobre eso. gracias :) –