Здравствуйте, RedCatX, Вы писали:
RCX>Есть два абстрактных класса, и один унаследован от другого, например:
RCX>class CAbstractBaseClass1 {
RCX>public:
RCX> virtual void print() const = 0;
RCX> virtual void init() const = 0;
RCX>};
RCX>class CAbstractBaseClass2: public CAbstractBaseClass1 {
RCX>public:
RCX> virtual int getVersion() const = 0;
RCX>};
RCX>И есть обычный класс CWorkingClass унаследованный от первого абстрактного класса:
RCX>class CWorkingClass: public CAbstractBaseClass1
RCX>{
RCX>};
RCX>Задача состоит в том, чтобы создать класс который будет реализовывать функции определенные во втором абстрактном классе
RCX>virtual int getVersion() const;
RCX>и в то же время будет предоставлять доступ к функциям первого абстрактного класса, реализованным в CWorkingClass.
RCX>То есть по идее должно быть что то вроде:
RCX>class CWorkingClass2: public CAbstractBaseClass2,
RCX> public CWorkingClass
RCX>{
RCX>};
RCX>Но проблема в том что компилятор не определяет, что методы CAbstractBaseClass1 были переопределены в классе CWorkingClass, и считает что CWorkingClass2 тоже является абстрактным, и следовательно не позволяет его создать.
RCX>Пожалуйста, подскажите как решить данную проблему
Так ли необходимо наследовать CAbstractBaseClass2 от CAbstractBaseClass1? Насколько я могу видеть, это типичный mix-in, и не нужно в этом случае усложнять себе жизнь.