私はC++ よくある質問そして、friend
宣言。私は個人的には使ったことがありませんが、この言語を探求することに興味があります。
を使用する良い例は何ですかfriend
?
FAQ をもう少し長く読んでみると、演算子をオーバーロードしてそれらのクラスのフレンドとして追加するというアイデアが気に入りました<<
>>
。ただし、これによってカプセル化が壊れないのはなぜかわかりません。これらの例外は、いつ OOP の厳密さの範囲内にとどまるのでしょうか?
ベストアンサー1
まず (私の意見ですが)、役に立たないと言う人の言うことに耳を傾けないでくださいfriend
。役に立っています。多くの場合、公開されることを意図していないデータや機能を持つオブジェクトがあります。これは、さまざまな分野について表面的にしか知らない多くの作成者がいる大規模なコードベースに特に当てはまります。
friend 指定子の代替手段はありますが、多くの場合、扱いにくいもの (cpp レベルの具体的なクラス/マスクされた typedef) であったり、確実ではないもの (コメントや関数名の規則) であったりします。
答えに移ります。
指定子friend
により、指定されたクラスは、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 );
};