1 友元函数
(1)友元函数:一个类的友元函数可以访问该类的私有成员。
(2)eg:(见friends.cpp)
// 友元函数例子
// 友元函数:一个类的友元函数可以访问该类的私有成员
#include <iostream>
using namespace std;
class CCar; // 提前声明CCar类,以便后面的CDriver类使用
class CDriver
{
public:
void ModifyCar(CCar* pCar); // 改装汽车 CCar的指针,如果不是指针,而是CCar的对象,则CCar在前面需要声明完整。
};
class CCar{
private:
int price; // 私有成员变量
friend int MostExpensiveCar(CCar cars[], int total); // 声明友元 找出最贵的那辆车
friend void CDriver::ModifyCar(CCar *pCar); // 声明友元 将CDriver::ModifyCar函数声明为CCar的友元
};
void CDriver::ModifyCar(CCar *pCar) {
// price 在CCar类中是私有成员,而在CDriver::ModifyCar()函数中却直接进行了访问,原因是CDriver::ModifyCar()这个成员函数是CCar这个类的朋友,友元。
pCar->price += 1000; // 汽车改装后价值增加
}
// 求最贵的汽车的价格 全局的普通的函数
int MostExpensiveCar(CCar cars[], int total)
{
int tmpMax = -1;
for(int i = 0; i < total; ++i)
// cars[i].price可直接访问的原因,是由于MostExpensiveCar是CCar的朋友,即友元。
if(cars[i].price > tmpMax)
tmpMax = cars[i].price;
return tmpMax;
}
int main()
{
return 0;
}
(3)可以将一个类的成员函数(包括构造、析构函数)说明为另一个类的友元。
eg:
class B{
public:
void function();
};
class A{
private:
int price;
friend void B::function(); // 将B::function()函数声明为A的友元,这样在函数B::function()函数中就可以访问A中的私有变量price
}
2 友元类
(1)定义:如果A是B的友元类,那么A的成员函数可以访问B的私有成员。
(2)eg:
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; }
(3)友元类之间的关系不能传递,不能继承。