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