「半仮想」メソッドが存在しないことは知っていますが、デザインに関連する問題が発生しました。「半仮想」メソッドを実装するためのベストプラクティスは何ですか?
私は、WebPageという基本クラスを持っているとしましょう。このクラスにはUpdatePage()というメソッドがあります。しかし、このメソッドは抽象WebPageオブジェクト内に存在するため、UpdatePage()メソッドは仮想であり、WebPageから具体的なクラスを派生しているユーザーが実装する必要があります。
しかし、UpdatePage()メソッドが呼び出されたとき、最後の更新時間に関するクラスデータメンバのタイムスタンプを作成するのが理想的です。
私は、メソッドからのデフォルトの実装(タイムスタンプを行う)が必要な位置にありますが、実装は基本クラスのWebPageから派生した具体的なクラスのカスタムにしたいと思っています。
私はこの問題を解決するための技術を考え出すことができます。たとえば、私はUpdatePage()を非仮想にして、非仮想のtimeStamp()メソッドと純粋仮想のupdateImplementation()メソッドの2つのメソッドを含むことができます。このようにして、ユーザーがUpdatePage()を呼び出すと、デフォルトおよびカスタム動作が存在します。
もう一度、このためにデザインパターン/ルールが存在する場合、私はホイールを再発明したくありません。
ありがとうございます!
メイクは '公共および非仮想UpdatePage'、そしてそれは、別のメソッドを呼び出す' DoUpdatePage'は、それが保護され、仮想だと言うします。派生クラスは後者を実装します。前者は、前後に必要な共通タスクを実行できます。 –
[テンプレートメソッドパターン](https://en.wikipedia.org/wiki/Template_method_pattern)を探していますか? – PaulMcKenzie
仮想関数を呼び出し、他の操作を実行する非仮想パブリック関数について言及すると、あなたは[NVI idiom](http://www.gotw.ca/publications/mill18.htm)について議論しているようです仮想関数呼び出しの前または後。 –