В С++ возможно ли иметь базовый плюс производный класс реализовать один интерфейс?
Например:
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;
}
Это не удается, потому что Derived не может быть создан. Что касается компилятора, то интерфейс:: BaseFunction никогда не определяется.
Пока единственным решением, которое я нашел, было бы объявить функцию прохода в Derived
class Derived : public Base, public Interface
{
public:
void DerivedFunction(){}
void BaseFunction(){ Base::BaseFunction(); }
};
Есть ли лучшее решение?
EDIT: Если это имеет значение, вот проблема реального мира, с которой я использовал диалоги MFC.
У меня есть класс диалога (говорит MyDialog), который происходит из CDialog. Из-за проблем с зависимостями мне нужно создать абстрактный интерфейс (MyDialogInterface). Класс, который использует MyDialogInterface, должен использовать методы, специфичные для MyDialog, но также должен вызывать CDialog:: SetParent. Я просто решил это, создав MyDialog:: SetParent и передав его в CDialog:: SetParent, но задавался вопросом, есть ли лучший способ.