友元功能:通过friend友元设置,外部函数或者外部类可以访问该类的私有、protected成员
1. 友元分友元函数、友元类。友元函数实际上是一个定义在类外部的普通函数,不属于任何类,友元函数声明可以放在类的private、protected、private任何地方没有区别,友元类的所有函数都是友元函数
2. 友元关系不能被继承(好比朋友的儿子不一定还是朋友一样)
3. 友元关系是单向的(a类可以通过友元访问b类私有,不代表反向也可以)
4. 友元访问类内私有或protected成员 比 公有的set()/get()更好,更加具有封装性:因为友元只设置指定的友元函数或友元类访问其私有,而后者public set()是公有的,故友元并没有破坏封装性,反而更具有更好的封装性
# include <iostream>
using namespace std;
class Teacher
{
friend void set(Teacher &); //友元函数声明
friend class tax; //友元类声明,声明的这两个都有特权可以外部访问该类私有或保护成员
protected:
int salary;
};
void set(Teacher &t) //外部友元函数
{
t.salary = 100;
}
class tax //外部友元类
{
public:
int chackSalary(Teacher &t)
{
return t.salary;
}
};
int main()
{
Teacher t1;
set(t1); //修改类内保护成员变量
tax t2;
int a = t2.chackSalary(t1);//查询类内保护成员变量
cout<<a<<endl;
return 0;
}