[解決済み] C++で'friend'はいつ使うべきですか?
質問
を読み進めてきました。
C++のFAQ
が気になり
friend
宣言があります。私自身は使ったことがないのですが、この言語には興味があります。
を使用する良い例は何ですか?
friend
?
FAQをもう少し読んでみると、私は
<<
>>
演算子をオーバーロードして、それらのクラスの友人として追加します。しかし、これがどうしてカプセル化を破らないのか、私にはよくわからない。このような例外が、OOPという厳密性の範囲内に留まることができるのはいつなのでしょうか?
解決方法は?
まず第一に(IMO)、次のような人の言うことを聞いてはいけません。
friend
は有用ではありません。有用です。多くの場合、一般に公開されることを意図していないデータや機能を持つオブジェクトがあります。特に、多くの作者がいて、それぞれの分野に表面的にしか精通していないような大規模なコードベースでは、そのようなことが起こり得ます。
friend 指定子に代わるものはありますが、面倒だったり(cpp レベルの具象クラスやマスクされた typedef)、確実でなかったり(コメントや関数名の規則)することがよくあります。
答えに入ります。
は
friend
指定されたクラスは、フレンドステートメントを作成したクラス内の保護されたデータや機能にアクセスすることができます。例えば、以下のコードでは、誰でも子供に名前を尋ねることができますが、母親と子供だけが名前を変更することができます。
この単純な例をさらに進めて、Windowのような複雑なクラスを考えてみましょう。おそらく Window は多くの関数やデータ要素を持ち、それらは一般にはアクセスできませんが、 WindowManager のような関連するクラスでは必要です。
class Child
{
//Mother class members can access the private parts of class Child.
friend class Mother;
public:
string name( void );
protected:
void setName( string newName );
};
関連
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] どのような場合に '$this' よりも 'self' を使うべきですか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
-
[解決済み] 仮想デストラクタはいつ使うのか?
-
[解決済み] C++でクラスと構造体はいつ使い分けるべきか?
-
[解決済み] noexceptを本当に使うべきはいつですか?
-
[解決済み】なぜC++プログラマは'new'の使用を最小限に抑えなければならないのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む