デフォルト パラメータを持つ仮想関数
仮想関数は、オブジェクト指向プログラミングでポリモーフィズムのためによく使用されます。これらはデフォルトのパラメーター値を持つことができ、派生クラスがこれらのデフォルトを継承するのか、それとも独自のデフォルト値を指定するのかという問題が生じます。
派生クラスはデフォルト値を継承しますか?
によるとC 標準の派生クラスは、基本関数から仮想関数のデフォルト値を継承しません。 class.
どのデフォルト値が使用されますか?
仮想関数呼び出しで使用されるデフォルト値は、呼び出されるオブジェクトの静的型によって異なります。基本クラスのオブジェクトまたは参照を通じて仮想関数を呼び出す場合、基本クラスのデフォルト値が使用されます。ただし、派生クラスのオブジェクトまたは参照を通じて呼び出した場合は、派生クラスのデフォルト値が使用されます。
コンパイラーの動作と推奨プラクティス
コンパイラーによっては、仮想関数のデフォルトを別の方法で処理します。ただし、C 標準では、デフォルト値は継承されず、派生クラスで明示的に指定する必要があると規定されています。
例
次の例を考えてみましょう:
struct Base { virtual void f(int a = 7); }; struct Derived : public Base { void f(int a); };
この例では、派生クラスの f 関数は、基本クラスからデフォルト値の 7 を継承しません。派生クラス オブジェクトを通じて f を呼び出す場合、以下に示すように、呼び出しで引数を明示的に指定する必要があります。
Derived d; d.f(10); // Call `Derived::f(int a)` with a = 10
結論
一方、仮想関数はデフォルトのパラメーターを持つことができます。 、これらのデフォルトは派生クラスには継承されません。使用されるデフォルト値は、呼び出されるオブジェクトの静的タイプによって異なります。 C 標準の推奨事項に従い、派生クラスでデフォルト値を明示的に指定することがベスト プラクティスとみなされます。
以上が派生クラスは仮想関数のデフォルトパラメータを継承しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。