分为友元函数和友元类

    • 友元函数:一个类的友元函数可以访问该类的私有成员

      1. class CCar; // 提前声明CCar类
      2. class CDriver {
      3. public:
      4. void modifyCar(CCar * pCar);
      5. };
      6. class CCar {
      7. private:
      8. int price;
      9. friend int mostExpensiveCar(CCar cars[], int total); // 声明友元
      10. friend void CDriver::modifyCar(CCar * pCar); // 声明友元
      11. };
      12. void CDriver::modifyCar(CCar * pCar) {
      13. pCar->price += 1000;
      14. }
      15. int mostExpensiveCar(CCar cars[], int total) {
      16. ...
      17. }
    • 友元类:如果A是B的友元类,那么A的成员函数可以访问B的私有成员

      1. class CCar {
      2. private:
      3. int price;
      4. friend class CDriver; // 声明友元类
      5. };
      6. class CDriver {
      7. public:
      8. CCar myCar;
      9. void modifyCar() {myCar.price += 1000;} // 友元类访问私有成员
      10. };
    • 友元类之间不能继承,也不能传递