これがあるとしましょう:
class A
{
public:
virtual void foo() = 0;
};
class B: public A
{
public:
virtual void foo() = 0;
};
コンパイラはエラーをスローしません。Bも抽象クラスであり、foo
Aから実装する必要がないためだと思います。しかし、そのような構造はどういう意味ですか?
1)foo
BからはAから隠れfoo
ますか?
2)Bを継承し、抽象クラスではない最初のクラスは、次のような2つの実装を提供する必要がありますか。
class C: public B
{
public:
virtual void A::foo() {};
virtual void B::foo() {};
};
コンパイラは、の実装が欠落している場合にのみ文句を言いますが、の実装B::foo()
が欠落していることについては文句を言いませんA::foo()
。
全体として:これは純粋仮想メソッドを隠す方法ですか?