C++ でプライベート メソッドを仮想化する利点は何ですか?
オープンソースの C++ プロジェクトでこれに気づきました:
class HTMLDocument : public Document, public CachedResourceClient {
private:
virtual bool childAllowed(Node*);
virtual PassRefPtr<Element> createElement(const AtomicString& tagName, ExceptionCode&);
};
ベストアンサー1
ハーブ・サッターはそれをとてもうまく説明しているここ。
ガイドライン 2: 仮想関数をプライベートにすることを優先します。
これにより、派生クラスは関数をオーバーライドして、必要に応じて動作をカスタマイズできます。仮想関数を派生クラスから呼び出せるようにすることで、仮想関数を直接公開する必要がなくなります(関数が保護されている場合は可能です)。重要なのは、仮想関数はカスタマイズを可能にするために存在するということです。派生クラスのコードから直接呼び出す必要がない限り、それらをプライベート以外のものにする必要はありません。