C のプライベート純粋仮想関数
C では、Engine クラスのようなプライベート純粋仮想関数に遭遇すると、困惑することがあります。質問が示すように、派生クラスはこれらの関数の実装を提供することが期待されていますが、そのために基本クラスのプライベート メンバーにアクセスするにはどうすればよいでしょうか?
しかし、この質問は誤解に基づいています。派生クラスは実際に実装することができます。プライベートの純粋仮想関数をオーバーライドします。直接呼び出すことはできない場合がありますが、独自の実装を提供することはできます。これにより、「実装のカスタマイズ可能な動作の仕様からインターフェイスの仕様を分離」することが可能になります。 (Herb Sutter、「Virtuality」)
指定された例では、パブリック インターフェイスは、非パブリックで非オーバーロードの仮想関数を呼び出す非仮想オーバーロード関数で構成されています。 「Public Overloaded Non-Virtuals Call Protected Non-Overloaded Virtuals」として知られるこのパターンは、派生クラス内の仮想関数を「隠す」問題に対処します。
SetStateBool と SetStateInt が純粋な仮想関数であるという仮定のケースを考えてみましょう。基本クラスの非仮想インターフェイスを使用します。派生クラスは、特定のオーバーロードが新しい実装によって隠蔽されないように保護する必要があります。そのためには、using 宣言を使用する必要があります。
ただし、プライベート仮想関数を使用すると、派生クラスは、基本クラス内の他のメソッドを隠すことを気にせずに、これらの関数をオーバーライドできます。これにより、派生クラスの仮想関数の動作をカスタマイズするプロセスが簡素化されます。
以上が派生クラスは C のプライベート純粋仮想関数をオーバーライドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。