友元的目的
讓一個類或函數去訪問另一個類中的私有成員
關鍵字
friend
分類:
全局函數做友元
類友元
成員函數做友元
1.全局函數做友元
class Bulid {
friend void run();//設置友元
public:
Bulid();
string setingroom;
private:
string bedroom;
};
//類外實現成員函數
Bulid::Bulid(){
this->setingroom = "客廳";
this->bedroom = "臥室";
}
void run() {
Bulid bulid;
cout << "好基友正在訪問" << bulid.setingroom << endl;
cout << "好基友正在訪問" << bulid.bedroom << endl;
}
int main() {
run();
}
可以看到run函數做友元后可以訪問私有變量 bedroom
2.類友元
class gayfriend {
private:
Bulid * bulid;//Bulid類的指針
public :
gayfriend();//構造函數
public:
void vist();
};
class Bulid {
friend class gayfriend;//設置類友元
public:
Bulid();//構造函數
string setingroom;
private:
string bedroom;
};
//設置類外成員函數
Bulid::Bulid(){
this->setingroom = "客廳";
this->bedroom = "臥室";
}
gayfriend::gayfriend() {
this->bulid = new Bulid;//此處不釋放內存了,重點不在這
}
void gayfriend::vist() {
cout << "好基友拜訪了" << bulid->setingroom<<endl;//輸出正常
cout << "好基友拜訪了" << bulid->bedroom<<endl;//已經設置友元,輸出正常
}
void run() {
gayfriend gay;
gay.vist();
}
int main(){
run();
}
3.成員函數做友元
class Bulid;
class gayfriend {
private:
Bulid* bulid;
public:
gayfriend();
void vist();
};
class Bulid {
friend void gayfriend::vist();//設置成員函數爲友元 注意gayfriend類的代碼需在Bulid之前,不然編譯器不會識別
public:
Bulid();//構造函數
string setingroom;
private:
string bedroom;
};
//類外實現成員函數
Bulid::Bulid(){
this->setingroom = "客廳";
this->bedroom = "臥室";
}
gayfriend::gayfriend() {
bulid = new Bulid;
}
void gayfriend::vist() {
cout << "基友訪問了" << bulid->setingroom << endl;//訪問客廳
cout << "基友訪問了" << bulid->bedroom << endl;//訪問私有臥室,成功
}
void run() {
gayfriend gay;
gay.vist();
}
int main(){
run();
}