Есть два абстрактных класса, и один унаследован от другого, например:
class CAbstractBaseClass1 {
public:
virtual void print() const = 0;
virtual void init() const = 0;
};
class CAbstractBaseClass2: public CAbstractBaseClass1 {
public:
virtual int getVersion() const = 0;
};
И есть обычный класс CWorkingClass унаследованный от первого абстрактного класса:
class CWorkingClass: public CAbstractBaseClass1
{
public:
virtual void print() const { cout << "Print" << endl; }
virtual void init() const { cout << "Inizialization..." << endl; }
};
Задача состоит в том, чтобы создать класс который будет реализовывать функции определенные во втором абстрактном классе
virtual int getVersion() const;
и в то же время будет предоставлять доступ к функциям первого абстрактного класса, реализованным в CWorkingClass.
То есть по идее должно быть что то вроде:
class CWorkingClass2: public CAbstractBaseClass2,
public CWorkingClass
{
public:
virtual int getVersion() const { return 4; }
};
и должны работать преобразования
CWorkingClass *working = new CWorkingClass2();
CAbstractBaseClass1 *b1 = dynamic_cast<CAbstractBaseClass1*>(working);
CAbstractBaseClass2 *b2 = dynamic_cast<CAbstractBaseClass2*>(working);
Но проблема в том что компилятор не определяет, что методы CAbstractBaseClass1 были переопределены в классе CWorkingClass, и считает что CWorkingClass2 тоже является абстрактным, и следовательно не позволяет его создать.
Пожалуйста, подскажите как решить данную проблему