1. 友元函數
一個類的有元函數可以訪問該類的私有成員
class CCar; //提前聲明CCar類,以便後面CDriver類使用
class CDriveer{
public:
void ModifyCar(CCar * pCar); //改裝汽車
};
class CCar{
private:
int price;
friend int MostExpensiveCar(CCar cars[], int tatal); //聲明友元
friend void CDriver::ModifyCar(CCar * pCar); //聲明友元
};
void CDriver::ModifyCar(CCar * pCar)
{
pCar->price += 1000; //汽車改裝後價值增加
}
int MostExpensiceCar(CCar cars[], int total)
{
int tmpMax = -1;
for(int i = 0; i < total; ++i)
if(cars[i].price > tmpMax)
tmpMax = cars[i].price;
return tmpMax;
}
int main()
{
return 0;
}
將一個類的成員函數(包括構造,析構函數)指向另一個類的友元
class B{
public:
void function();
};
class A{
friend void B::function();
};
2. 友元類
A是B的友元類 -> A的成員函數可以訪問B的私有成員
class CCar{
private:
int price;
friend class CDriver; //聲明CDriver爲友元類
};
class CDriver{
public:
CCar myCar;
void ModifyCar()
{ //改裝汽車
myCar.price += 1000; //CDriver是CCar的友元類->可以訪問其私有成員
}
};
int main(){return 0;}
友元類之間的關係,不能傳遞,不能繼承。
站在巨人的肩上
【1】北京大學信息技術學院《程序設計實習》