Мне любопытно, есть ли аккуратный способ предоставления методов в базовом классе производного интерфейса.
Итак, в коде: -
class cbase {
public:
void MyMethodA() { }
};
class cderived : public cbase {
public:
void MyMethodB() { }
}
class ibase {
public:
virtual void MyMethodA() = 0;
};
class iderived : public ibase {
public:
virtual void MyMethodB() = 0;
};
Теперь, если я заставлю cbase наследовать ibase, а cderived реализовать iderived, компилятор будет жаловаться, что когда я создаю экземпляр cderived, MyMethodA () является абстрактным, а нереализовано.
MyMethodA () реализовано в базовом классе и через ibase.Это единственный способ исправить это, чтобы переопределить методы ibase в классе cderived?Если это так, чёрт!
Итак, как показано ниже: -
class cbase : public ibase {
public:
void MyMethodA() { }
};
class cderived : public cbase, public iderived {
public:
void MyMethodA() { cbase::MyMethodA(); }
void MyMethodB() { }
};
cderived inst;
iderived *der = &inst;
der->MyMethodA();
der->MyMethodB();
ibase *bas = der;
bas->MyMethodA();
Надеюсь, этого достаточно, чтобы передать вопрос.:) Это может звучать немного странно, поскольку мы пытаемся реорганизовать старый код.
Я уверен, что есть много интересных комментариев;)