仮想関数とデフォルト パラメーターの使用法
C では、仮想関数を使用すると、派生クラスが独自の特殊な動作で基本クラスの実装をオーバーライドできます。ただし、デフォルトのパラメータ値に関しては、継承のルールが通常のパラメータとは異なります。
基本クラスのデフォルトのパラメータ値
仮想関数はデフォルトのパラメータ値を持つことができます基本クラス宣言で指定されています。これらのデフォルトは派生クラスには継承されません。代わりに、派生クラスは独自のデフォルト値を指定するか、それらを完全に省略する必要があります。
デフォルト パラメーターの選択
派生クラス オブジェクトを通じて仮想関数を呼び出す場合、デフォルト パラメーター使用される値は、関数の呼び出しに使用されるポインターまたは参照の静的型によって決まります。基本クラスのオブジェクトまたはポインターを通じて呼び出しが行われた場合は、基本クラスのデフォルト値が使用されます。逆に、派生クラスのオブジェクトまたはポインターを通じて呼び出しが行われた場合は、派生クラスのデフォルト値が使用されます。
例
次の例を考えてみましょう。
struct Base { virtual void f(int a = 7); }; struct Derived : public Base { void f(int a = 9); };
Base ポインタを介して f() を呼び出すと、Base で定義されたデフォルト値 7 が使用されます。ただし、 Derived ポインターを介して f() を呼び出すと、Derived で定義されたデフォルト値 9 が使用されます。
クロスプラットフォームの考慮事項
一方、C 03 および C 11 標準では上記の動作が指定されていますが、コンパイラが異なれば、デフォルト パラメータの継承の処理方法が異なる場合があります。潜在的な不一致を避けるために、派生クラスでは常にデフォルトのパラメーター値を明示的に指定することをお勧めします。
結論
仮想関数にはデフォルトのパラメーターを持つことができますが、これらのデフォルトはありません派生クラスによって継承されます。仮想関数呼び出しで使用されるデフォルト値は、関数の呼び出しに使用されたオブジェクトの静的型によって決定され、派生クラスが必要に応じて独自のデフォルト動作をカスタマイズできるようになります。
以上がデフォルトのパラメータ値は C 仮想関数と継承でどのように動作しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。