友元分爲友元函數和友元類兩種。
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的友元)