C でオーバーライドされた関数のオーバーロード
基底クラス関数をオーバーライドすると関数のオーバーロードが非表示になるという問題が発生した場合、次のことが重要です。 C の継承モデルの固有の動作を理解します。
指定された例では、バーがclass は foo::a() 関数をオーバーライドし、bar クラスのスコープ内で foo::a() のオーバーロードされたバージョンをすべて非表示にします。これは本質的に間違っているわけではなく、仕様によるものです。
この問題を解決するには、bar クラスは using 宣言を利用できます。
<code class="cpp">class bar : public foo { public: using foo::a; // Bring all 'foo::a()' overloads into 'bar' scope ... };</code>
using 宣言は、foo:: のすべてのオーバーロードを効果的にインポートします。 a() を bar クラスのスコープに追加すると、オーバーロードが適切に機能できるようになります。
ただし、潜在的な結果を考慮することが重要です。既存のコードが foo クラスを使用している場合、bar を介して新しいオーバーロードを追加すると、その動作に影響を与えたり、あいまいさが生じたりして、コンパイル時エラーが発生する可能性があります。
以上がC のオーバーライドされた関数はオーバーロードされたバージョンを隠すことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。