1. 程式人生 > 其它 >友元函式

友元函式

技術標籤:C++

為什麼要使用友元函式

當類想要實現一個功能,而他本身又完成不了的時候,需要藉助外力來完成,這時候設定一個友元函式來完成.友元函式可以訪問類裡的所有資料,提高了執行效率

友元函式的倆種使用方式

友元函式,友元類

使用全域性函式作為友元函式

這裡設計了一個CPU升級的函式,因為電腦本身是無法自己給自己升級的,所以就要藉助外力,當然也可以定義介面寫

這裡的實現友元函式也很簡單,只要把宣告放入類裡就行,public和private都一樣

#include <iostream>
#include <string>
#include <sstream>
//把全域性函式設為友元函式 //設一個升級CPU的函式 class computer { public: computer(); std::string description(); friend void upgrade(computer* computer); private: std::string CPU; }; computer::computer() { this->CPU = "i7"; } std::string computer:: description() { std::stringstream ret; ret <<
"CPU:" << CPU; return ret.str(); } void upgrade(computer *computer) { computer->CPU = "i9"; } int main() { computer com; std::cout << com.description() << std::endl; upgrade(&com); std::cout<<com.description()<<std::endl; system
("pause"); return 0; }

使用類的成員函式作為友元函式

這裡再寫函式時遇到幾個問題,因為為了方便複製過來,我沒有把類和方法以及main函式分開寫,不知道問題是不是出現在這

1.先定義的類的成員函式才可以在後定義的類裡 作為成員函式
2.因為上面那點,所以先定義的類的成員函式可能會引用下面的類,所以要在前面先申明,比如我寫的 class computer,

如果涉及到具體方法還要新增標頭檔案
在這裡插入圖片描述

#include <iostream>
#include <string>
#include <sstream>

//把類的成員函式設為友元函式
//設一個升級CPU的函式
class computer;

class computerServe 
{
public:
	void upgrade(computer* computer);
private:
	std::string CPU;
};

class computer
{
public:
	computer();
	std::string description();
	friend void computerServe::upgrade(computer* computer);

private:
	std::string CPU;
	
};
computer::computer()
{
	this->CPU = "i7";
}

 std::string computer:: description() {
	 std::stringstream ret;
	 ret << "CPU:" << CPU;
	 return ret.str();
}


 void computerServe::upgrade(computer *computer) {
	 computer->CPU = "i9";
 }

int main() {
	computer com;
	computerServe serve;

	std::cout << com.description() << std::endl;

	serve.upgrade(&com);
	
	std::cout<<com.description()<<std::endl;

	system("pause");
	return 0;
}