友元分友元函数、友元类。
友元函数:一个类的友元函数可以访问该类的私有成员
我们可以将一个类的成员函数(包括构造、析构函数)作为另一个类的友元函数。如下
class CCar; // 提前声明CCar 类,以便后面的CDriver类使用 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) { 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; }
友元类
A是B的友元类,则A的成员函数可以访问B的私有成员。
注意:友元类之间的关系不能传递,不能继承。
如下代码
class CCar { private: int price; friend class CDriver; // 声明CDriver 为友元类 }; class CDriver { public: CCar myCar; void ModifyCar() { // 改装汽车 myCar.price += 1000; } }; int main() {return 0;}