1

次の例では、動的ディスパッチを使用して仮想関数を呼び出しますか?

struct Base{
    virtual double fn(){return 3.2;}
};
struct Deri1 : public Base{
    using Base::fn;
}
struct Deri2 : public Base{
    virtual double fn(){return 4.6;}
}

私が実装しているクラスにはより多くの情報が含まれていますが、一部の派生クラスではデフォルトのままにし、他のクラスではオーバーライドしたいものがあります。上記のコードの fn() はその例です。基本的には、基本クラスを使用して、オーバーライドされないたびに fn() を書き換えないようにしています。これは正しい方法ですか?

ありがとう!

4

1 に答える 1

0

このリンクで説明されているように、ポインターを使用しない限り、関数の定義で「仮想」キーワードを使用しないことで、動的ディスパッチを回避できます。

これにより、ジェネリック メソッドとポリモーフィズムが複雑になります。動的ポリモーフィズムを使用している場合は、基本クラスへのポインターをメソッドに渡します。この場合、ポインターが使用するメソッドを決定するには、'virtual' キーワードが必要です。次のリンクで説明されているように、テンプレートを使用して静的ポリモーフィック メソッドを定義できます。

于 2013-10-02T13:33:20.470 に答える