C++友元

友元的目的
讓一個類或函數去訪問另一個類中的私有成員
關鍵字
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();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章