Я пытаюсь определить типы интерфейсов в 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;
}