Я пытаюсь определить типы интерфейса в C ++, используя абстрактные классы, и реализовать их с помощью конкретных классов. Проблема, с которой я столкнулся, заключается в том, что я не могу одновременно наследовать и взаимодействовать с другим интерфейсом и наследовать реализацию от базового конкретного класса.
Моя цель - определить иерархию интерфейсов, которая может быть унаследована от менее сложных базовых интерфейсов. Я также хочу иметь возможность расширять реализацию интерфейсов путем наследования от конкретных классов (например, наследования от TObjectA в приведенном ниже примере).
Это то, что у меня есть. Я получаю сообщение об ошибке: «Объект абстрактного класса типа« TObjectB »не разрешен». Думаю, я знаю почему, потому что я не реализовал MethodA () в TObjectB. Но я действительно хочу, чтобы реализация обеспечивалась базовым классом (TObjectA) и при этом сохранялась иерархия интерфейсов (IInterfaceB наследуется от IInterfaceA). Я также не хочу повторять все унаследованные методы интерфейса в моих производных конкретных классах. Как я могу это сделать?
class IInterfaceA
{
public:
virtual void MethodA() = 0;
};
class IInterfaceB : IInterfaceA
{
public:
virtual void MethodB() = 0;
};
class TObjectA : public IInterfaceA
{
public:
void MethodA() { cout << "Method A"; }
};
class TObjectB : public TObjectA, public IInterfaceB
{
public:
void MethodB() { cout << "Method B"; }
};
void TestInterfaces()
{
IInterfaceB* b = new TObjectB(); // error: object of abstract class type "TObjectB" is not allowed
b->MethodB();
delete b;
}