6

次のようなダイヤモンドの継承状況があるとします。

class A{
    public: virtual void foo(){};
};
class B: public virtual A{
    public: virtual void foo(){};
};
class C: public virtual A{
    public: virtual void foo(){};
};
class D: B, C{};

最後の行では、あいまいさを理由にコンパイル エラーが発生します。私が理解しているように、問題は、コンパイラが D の vtbl に配置する foo を認識していないことですが、独自の仮想関数を定義していない場合、なぜ D の vtbl があるのでしょうか?

4

1 に答える 1

7

仮想関数を含むクラスを継承しています。したがって、クラスには仮想関数があります。それはそれと同じくらい簡単です。

于 2010-02-09T00:51:47.460 に答える