C++プログラミング思想第三章例コード(二)友元
847 ワード
友元(この構造に属さないメンバーが構造内のデータにアクセスできるようにする)
原文のコードではキーワードfriendで外部関数,外部構造,外部構造の関数をXの友元として宣言し,Xのprivate変数へのアクセスを許可する.
注目すべきは、元の構造Aのネスト構造Bの関数は上位構造Aのprivate変数を呼び出すことができず、Bの関数がAの友元であることを宣言してBのprivate変数を呼び出すことができ、ネスト友元と呼ばれる.
原文のコードではキーワードfriendで外部関数,外部構造,外部構造の関数をXの友元として宣言し,Xのprivate変数へのアクセスを許可する.
注目すべきは、元の構造Aのネスト構造Bの関数は上位構造Aのprivate変数を呼び出すことができず、Bの関数がAの友元であることを宣言してBのprivate変数を呼び出すことができ、ネスト友元と呼ばれる.
//:FRIEND.CPP--Friend allows special access
struct X;
struct Y{
void f(X*);
};
struct X{
private:
int i;
public:
void initialize();
friend void g(X*,int);//global friend
friend void Y::f(X*);//struct member friend
friend struct Z;//Entire struct is a friend
friend void h();
};
void X::initialize(){
i=0;
}
void g(X* x,int i){
x->i=i;
}
void Y::f(X* x){
x->i=47;
}
struct Z{
private:
int j;
public:
void initialize();
void g(X* x);
};
void Z::initialize(){
j=99;
}
void Z::g(X* x){
x->i+=j;
}
void h(){
X x;
x.i=100;
}
main(){
X x;
Z z;
z.g(&x);
}