... когда класс acatally предоставляет реализации для всех абстрактных методов, но не является «формальным» внедрением интерфейса?Как я могу реализовать класс для реализации интерфейса .... (C++)
Допустим, у меня есть следующие:
class AInterface {
public:
virtual void mem_func()=0;
virtual ~AInterface(){}
};
void AFunction(AInterface* i){};
class BClass {
public:
void mem_func(){}
virtual ~BClass(){}
};
и я не могу изменить все это, но я хочу использовать объект класса BClass вызвать прекращение функции.
На самом деле, я хотел бы написать что-то вроде
class MyABClass : public BClass,public AInterface {};
, но это не помогает (класс просто наследует оба метода и абстрактно). Я предполагаю, что один из способов сделать это писать что-то вроде
class MyABClass : public AInterface {
public:
void mem_func(){a.mem_func();}
private:
BClass a;
}
Это прекрасно работает, но мне интересно, если это возможно, чтобы сохранить некоторые письма или, если есть лучший способ справиться с этой ситуацией.
Что вы пытаетесь достичь или это просто общее исследование ООП на C++? Похоже, вы пытаетесь реализовать Mixins, но я не совсем уверен. – BlamKiwi
Почему бы не просто «класс MyClass: public AClass {}'? –
Я не думаю, что вы можете сделать это, как хотите. Предположим, что AInterface :: A() не является чисто виртуальным, компилятор не может знать, какой из них вызывать, когда вы вызываете MyClass :: A(). Если AInterface :: A() является чистой вирутальной функцией, компилятор должен сначала найти A(). – imlyc