友元函数:
1:一个类的
友元函数可以访问该类的私有成员.
#include <iostream>
using namespace std;
class CCar ; //提前声明 CCar类,以便后面的CDriver类使用
class CDriver
{
public:
void ModifyCar( CCar * pCar) ; //改装汽车
};
class CCar
{
private:
int price;
public:
CCar(int p):price(p){ } //CCar的构造函数
friend int MostExpensiveCar( CCar cars[], int total); //声明MostExpensiveCar为CCar类的友元函数
friend void CDriver::ModifyCar(CCar * pCar); //声明ModifyCar为CCar类的友元函数
};
void CDriver::ModifyCar( CCar * pCar)
{
pCar->price += 1000; //汽车改装后价值增加
cout<<"CCar类的友元函数"<<endl;
}
int MostExpensiveCar( CCar cars[],int total)
//求最贵汽车的价格
{
cout<<"CCar类的友元函数"<<endl;
int tmpMax = -1;
for( int i = 0;i < total; ++i )
if( cars[i].price > tmpMax)
tmpMax = cars[i].price;
return tmpMax;
}
int main()
{
CCar a[] = {200,800,700,100,1000} ;
CDriver b;
b.ModifyCar(a+2); //调用一次友元函数 ,a+2表示将第3辆车进行改装,价格变为1700
int c = MostExpensiveCar(a,5); //调用第二次友元函数
cout<<c; //输出最贵的车1700
return 0;
}
/*
输出结果:
CCar类的友元函数
CCar类的友元函数
1700
*/
注意:
1:如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend。
2:一个类的友元函数可以是其他类的成员函数(包括构造、析构函数)。
友元类:
1:如果A是B的友元类,那么A的成员函数可以访问B的私有成员。
#include <iostream>
using namespace std;
class CCar
{
private:
int price=1;
public:
int p=0;
friend class CDriver; //声明CDriver是CCar的友元类
};
class CDriver
{
public:
CCar myCar;
void ModifyCar() {//改装汽车
cout<<++myCar.p<<endl;
myCar.price += 1000;
cout<<myCar.price<<endl;//因CDriver是CCar的友元类,故此处可以访问其私有成员
}
};
int main(){
CDriver a;
a.ModifyCar();
return 0;
}
/*
输出结果:
1
1001
*/