允许特定的非成员函数访问一个类的私有成员,同时仍然阻止一般的访问,这样就是友元。友元允许一个类将对其非公有成员的访问权授予指定的函数或类。友元的声明以关键字friend开始。它能出现在类定义的内部的任何地方。
class Sales{
friend class WindosNDF;
public:
int data;
char ch;
string gstr;
void appleCast(){ gstr.push_back('C'); }
int appleAdd(int x){ return data + x; }
int appleKey(int b){ key=b; return key; }
bool appleUI() const;
private:
string str;
int key;
float oa;
};
class WindosNDF{
Sales s;
void relocate(){
s.key++;
s.oa++;
};
void reload(){
s.key--;
s.oa--;
}
};
如果不是将整个类设为友元,可以指定只允许特定的成员成为友元
class Sales{
friend void WindosNDF::relocate();
private:
int data;
}
class WindosNDF{
Sales s;
void relocate(){
++s.data;
};
void reload(){
--s.data;//此处编译不过,因为该函数不是友元
}
};