マイヤーは、特定のシナリオでは、メンバー以外の非友人機能がメンバー機能よりも優れていることを実証C++で説明しています。メンバ関数以外の非フレンド関数をいつ使うべきですか?
例:
// Web browser allows to clear something
class WebBrowser {
public:
...
void clearCache();
void clearHistory();
void removeCookies();
...
};
多くのユーザーはそうWebBrowser
もちょうどそれを行うための機能を提供するかもしれない、一緒にすべてのこれらのアクションを実行することになるでしょう:
class WebBrowser {
public:
...
void clearEverything(); // calls clearCache, clearHistory, removeCookies
...
};
他の方法を定義することですメンバー以外の非友人機能。 「それは、クラスのプライベートな部分にアクセスできる機能の数を増加させない。」ので、より良好にカプセル化につながる
void clearBrowser(WebBrowser& wb)
{
wb.clearCache();
wb.clearHistory();
wb.removeCookies();
}
非メンバ関数が良いです。彼らはWebBrowser
クライアントがすでにいくつかの他の方法で得ることができませんでした任意の機能を提供することはできませんのでclearBrowser
よう
機能便利な機能です。たとえば、clearBrowser
が存在しない場合、クライアントはclearCache
、clearHistory
、およびremoveCookies
を呼び出すことができます。
私には、の便利な機能の例が妥当です。しかし、メンバー以外のバージョンが優れている場合、便利機能以外の例はありますか?
さらに一般的には、どのような場合にどのような規則を使用しますか?
私は、そのトピックに実際の客観的なルールよりも多くの宗教があると思います。 – PlasmaHH
任意の種類のアルゴリズムは、より広い範囲のオブジェクトに対して再利用できるので、メンバーではなく自由であるという利点があります。その一例は、新しい標準に追加された無料の 'begin()'/'end()'関数です(静的な配列とコンテナを反復することができます)。 –
@PlasmaHH:それはもっと宗教に似ているとは思わない。一部の機能を非会員かつ非友人にするための論理的根拠はかなり合理的です。 – Nawaz