Вопрос, как указано,
C ++, возможно ли заставить класс расширять один класс и реализовывать другой?
не имеет особого смысла.Ответ на это просто «да».Вы можете получить из любого числа классов: C ++ полностью поддерживает множественное наследование.
Итак, учитывая, что поставленный вопрос не является действительно значимым, по крайней мере возможно, что вы имели в виду , чтобы спросить
C ++ возможно ли заставить класс расширить один класс и тем самым реализовать другой?
Ответ на этот вопрос также да, но он не тривиален.Он включает в себя виртуальное наследование .Что довольно сложно.
Вот пример:
#include <iostream>
void say( char const s[] ) { std::cout << s << std::endl; }
class TalkerInterface
{
public:
virtual void saySomething() const = 0;
};
class TalkerImpl
: public virtual TalkerInterface
{
public:
void saySomething() const
{
say( "TalkerImpl!" );
}
};
class MyAbstractClass
: public virtual TalkerInterface
{
public:
void foo() const { saySomething(); }
};
class MyClass
: public MyAbstractClass
, public TalkerImpl
{};
int main()
{
MyClass().foo();
}
Виртуальное наследование гарантирует, что в * имеется только один подобъект типа TalkerInterface
1027 * экземпляр.Это имеет некоторые нелогичные последствия.Одна из них заключается в том, что «наследование в реализации» работает, а другая заключается в том, что создание подобъекта базового класса происходит в каждом конструкторе MyClass
, а в более общем случае - в самом производном классе.
Cheers &НТН.,