Реализация интерфейсов в C ++ с унаследованными конкретными классами

Я пытаюсь определить типы интерфейса в 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;
}
10
задан sysrpl 22 February 2012 в 23:27
поделиться