目录
概念:
在程序中,有些私有属性也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术。
作用:
友元的目的就是让一个函数或者类访问另一个类中的私有成员和保护成员。
关键字:friend
三种实现方式:
1、全局函数做友元;
2、类做友元;
3、成员函数做友元。
例题:
例1:全局函数做友元
#include<iostream>
#include<string>
using namespace std;
class Car
{
friend void father(Car* car);
public:
Car()
{
c_Name = "宝马";
c_Age = 18;
}
public:
string c_Name;
private:
int c_Age;
};
void father(Car* car)
{
cout << "父亲的全局函数" << car->c_Name;
cout << car->c_Age<<endl;
}
int main()
{
Car p;
father(&p);
system("pause");
return 0;
}
第7行在类中用了友元,把全局函数void father(Car*car)做成友元。
本来只能访问c_Name的,因为c_Name是public权限,而c_Age是private权限,不能被访问。
但是用了友元,可以访问私有成员和保护成员。
例2:类做友元
#include<iostream>
#include<string>
using namespace std;
class Car;
class father
{
public:
father();
void visit();//参观函数,用来访问Car的属性
Car* car;
};
class Car
{
friend class father;
public:
Car();
public:
string c_Name;
private:
int c_Age;
};
Car::Car()
{
c_Name = "宝马";
c_Age = 18;
}
father::father()
{
car = new Car;//创建一个车的对象,这个car是第11行创建的类指针car
}
void father::visit()//第10行定义的
{
cout << "父亲类" << car->c_Name;
cout << car->c_Age << endl;
}
int main()
{
father p;
p.visit();
system("pause");
return 0;
}
例3:成员函数做友元
#include<iostream>
#include<string>
using namespace std;
class Car;
class father
{
public:
father();
void visit();//参观函数,用来访问Car的属性
Car* car;
};
class Car
{
friend void father:: visit();//让father类下的visit()函数可以访问私有
public:
Car();
public:
string c_Name;
private:
int c_Age;
};
Car::Car()//类外实现成员函数
{
c_Name = "宝马";
c_Age = 18;
}
father::father()
{
car = new Car;//创建一个车的对象,这个car是第11行创建的类指针car
}
void father::visit()//第10行定义的
{
cout << "父亲类" << car->c_Name;
cout << car->c_Age << endl;
}
int main()
{
father p;
p.visit();
system("pause");
return 0;
}
注意第16行与类做友元不同