友元
1.使用原因
类的私有成员只能通过它的成员函数来访问。但是有的时候需要类的外部访问类的私有成员(或者保护成员)。为此,需要一种途径,在不放弃私有成员数据安全性的情况下,使得一个普通函数或者类的成员函数就可以访问某一类中的私有、保护成员。
c++中的友元为数据隐藏这堵不透明的墙开了一个小孔,外界可以通过这个小孔窥视类内部的密码。
2.友元函数的定义
即可以是不属于任何类的非成员函数,也可以是另一个类的成员函数,统称为友元函数。
友元函数不是当前类的成员函数,而是独立于当前类的外部函数 ,但他可以访问该类所有的成员,包含私有成员、保护成员和公有成员。
3.友元函数 的声明
在函数名前加上关键字friend。 可以定义在类的内部,也可以定义在类的外部。
4.注意事项
- 友元函数不是成员函数
- 友元函数必须通过作为入口参数传递进来的对象名(或对象指针,或对象引用,) 来访问引用该对象的数据成员
void disp(Girl &x); cout<<"女孩的姓名是:"x.name<<",年龄:"<<x.age<<endl;
5.将成员函数声明为友元函数
一个类的成员函数也可以作为另一个类的友元,它是友元函数的一种,成为友元成员函数。
友元成员函数不仅可以访问自己所在类对象中的私有成员和公有成员,还可以访问friend声明语句所在类对象中的所有成员。
说明:
- 声明一个类的成员函数作为另一个类的友元函数时,必须先定义这个类。
6.友元类
一个类可以作为另一个类的友元。
class Y{ .... }; class X{ ... friend Y; //声明类Y为类X的友元类
... }
当类Y被说明为类X的友元时,类Y的所有成员函数都成为类X的友元函数,这就意味着作为友元类Y中的所有成员函数都可以访问类X的所有成员(包括私有成员)。
说明:
- 友元关系是单向的,不具有交换性。
- 友元关系不具有传递性。