C++笔记13

人走茶凉 提交于 2020-02-10 11:43:43

友元

友元分为友元函数和友元类
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的友元

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!