友元(friends)

友元分爲友元函數和友元類兩種。

1.) 友元函數:

一個類的友元函數可訪問該類的私有成員。成員函數或全局函數都可以聲明爲友元函數。(下面代碼中ModifyCar這個類是成員函數,MostExpensiveCar是全局函數)

代碼:

//友元
#include<iostream>
using namespace std;

class CCar;//提前聲明,因爲CDriver會用到

class CDriver
{
public:
   void ModifyCar(CCar *car);//改裝車
};

class CCar
{
   private:
   	int price;
   	friend int MostExpensiveCar(CCar cars[],int AllNumber);//聲明友元
   	friend void CDriver::ModifyCar(CCar *car);//聲明友元
};

void CDriver::ModifyCar(CCar *car)//成員函數
{
	car->price+=1000;//雖然是price是CCar的私有變量,但是ModifyCar是CCar的友元函數,私有可以訪問。
}

int MostExpensiveCar(CCar cars[],int AllNumber)//全局函數
{
	int Max=0;
    for(int i=0;i<AllNumber;i++)
    	if(cars[i].price>Max)//雖然是price是CCar的私有變量,但是MostExpensiveCar是CCar的友元函數,私有可以訪問。
    	{
    		Max=cars[i].price;
    	}
    	return Max;
}

int main(void)
{
	return 0;
}

2.) 友元類:

如果A是B的友元類,那麼A的成員函數可以訪問B的私有成員。

代碼:

//友元類
class CCar
{
private:
	int price;
	friend class CDriver;//聲明CDriver爲友元類
};

class CDriver
{
public:
	CCar car;
	void ModifyCar()//改裝車
	{
		car.price+=1000;//因爲CDriver爲CCar的友元類,私有可以訪問其私有成員
	}
};

int main()
{
	return 0;
}

友元類之間不能傳遞,不能繼承。(A是B的友元,B是C的友元,但是A不是C的友元)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章