Скажем, у нас есть это:Чистые виртуальные методы в производном абстрактном классе
class A
{
public:
virtual void foo() = 0;
};
class B: public A
{
public:
virtual void foo() = 0;
};
компилятор не бросает никакой ошибки, я думаю, его потому, что B также является абстрактным классом, и как таковой он не должен осуществлять foo
от A Но что означает такая конструкция?
1) Есть foo
с B hide foo
от A?
2) Первый класс, который наследует от B и не является абстрактным классом, это должно обеспечить две реализации, как:
class C: public B
{
public:
virtual void A::foo() {};
virtual void B::foo() {};
};
Компилятор жалуется, только если реализация B::foo()
отсутствует, но не жалуется на отсутствие A::foo()
.
В целом: это способ скрыть чистые виртуальные методы?
Как именно вы скрыть это? – Alon
Если я не предоставляю реализацию для A :: foo() в C, я также могу создать экземпляр объекта C. Так что C всегда можно создать, даже если A :: foo() отсутствует. Поэтому я подумал, что каким-то образом A :: foo() не требуется в C, поэтому «скрыто». – Juergen
Поскольку B наследует A .. – Alon