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