什么是友元?
友元就是朋友,c++中为了方便访问某个类的私有成员,引入了友元的概念
友元用 “friend” 定义
友元函数
友元函数分为两种
- 友元全局函数
- 友元成员函数
友元全局函数
class Coordinate
{
friend void printXY(Coordinate &c);
publuc:
Coordinate(int x,int y){...}//这里省略赋值内容
private:
int x;
int y;
};
//全局定义
void printXY(Coordinate &c)
{
//直接访问私有成员
cout<<c.x<<c.y<<endl;
}
int main()
{
Coordinate coor(1,2);
printXY(coor);//当作全局函数调用
return 0;
}
友元成员函数
//这里不写Coordinate类,和上面相同
class Coordinate
{
//这里说明了这个函数是Circle的成员函数
friend void Circle::printXY(Coordinate &c);
publuc:
Coordinate(int x,int y){...}//这里省略赋值内容
private:
int x;
int y;
};
class Circle
{
public:
void printXY(Coordinate &c)
{
cout<<c.x<<c.y<<endl;
}
};
int main()
{
Cooridnate coor(1,2);
Circle circle;
//注意这里与全局的不同
circle.printXY(coor);
return 0;
}
友元类
友元类可以让一个类访问另一个类的私有数据
这里举单链表的例子
//先声明一下LinkList,防止Node找不到,我用的是CLion,没有提前声明
class LinkList;
class Node
{
private:
int data;
Node *next;
public:
Node();//这里省略构造析构,实际中要写
friend class LinkList ;//友元类
};
class LinkList
{
private:
Node *head;//节点
public:
...//省略
};
注意:
- 友元关系不可以传递
- 友元是单向的
特别提醒:友元只是封装的补充,不要用太多,破坏了封装性