分为友元函数和友元类
友元函数:一个类的友元函数可以访问该类的私有成员
class CCar; // 提前声明CCar类
class CDriver {
public:
void modifyCar(CCar * pCar);
};
class CCar {
private:
int price;
friend int mostExpensiveCar(CCar cars[], int total); // 声明友元
friend void CDriver::modifyCar(CCar * pCar); // 声明友元
};
void CDriver::modifyCar(CCar * pCar) {
pCar->price += 1000;
}
int mostExpensiveCar(CCar cars[], int total) {
...
}
友元类:如果A是B的友元类,那么A的成员函数可以访问B的私有成员
class CCar {
private:
int price;
friend class CDriver; // 声明友元类
};
class CDriver {
public:
CCar myCar;
void modifyCar() {myCar.price += 1000;} // 友元类访问私有成员
};
友元类之间不能继承,也不能传递