C++中的友元机制(friend),可以不通过调用成员函数便能直接访问类的私有数据。友元可以是函数(友元函数),也可以是类(友元类)。
一、友元函数
1.声明:在类体内,在函数类型前要加关键字friend;
2.定义:在类体外,格式与普通函数一样;
3.特点:(1)友元函数为非成员函数,调用上与普通函数一样;
(2)可直接访问该类中私有成员。
二、友元类
当声明一个类为另一个类的友元时,友元类中的所有成员函数都是另一个类的友元函数。
通过下面的代码例子,就会更明白了。
#include<iostream>
using namespace std;
class X
{
public:
friend class Y; //类Y是类X的友元类
void set(int i)
{
x = i;
}
void display()
{
cout << "x=" << x << ";" << "y:" << y <<endl;
}
private:
int x;
static int y;
};
class Y
{
public:
Y(int i,int j);
void display();
private:
X a; //数据成员为类X的对象
};
int X::y = 10;
Y::Y(int i,int j)
{
a.x = i;
X::y = j;
}
void Y::display()
{
cout << "x=" << a.x << "," << "y=" << X::y <<endl;
}
int main()
{
X b;
b.set(5);
b.display();
Y c(6,9);
c.display();
b.display();
return 0;
}
运行结果为:
注意:友元机制的作用主要是为了提高程序的运行效率和方便编程。但同时友元破坏了类的封装性,所以使用时慎重。