友元
友元分为友元函数和友元类
1.友元函数
一个类的友元函数可以访问该类的私有成员,友元函数不是这个类成员函数。
这个友元函数可以是一个很普通的全局函数,这个类把这个函数声明为友元以后,这个函数就可以访问这个类的私有成员了
exp.
class CCar;//提前声明CCar类,以便后面的CDriver类的使用 class CDriver { public: void ModifyCar(CCar * pCar);//改装汽车 如果是变量的话,应该在开头把CCar写完整 }; 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; }
可以将一个类的成员函数(包括构造函数析构函数)说明为另一个类的友元
class B{ public: void function(); }; class A{ friend void B::function(); };
2.友元类
如果A是B的友元类,那么A的成员函数可以访问B的私有成员
exp.
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;}
友元类之间的关系不能传递,不能继承
不能说你的朋友就是我的朋友
不能说A是B的友元,B是C的友元,A就是C的友元
来源:https://www.cnblogs.com/AirBirdDD/p/12290229.html