友元函数
我们知道在c 中类具有封装、继承、多态、数据私有化的特性,一般的类外函数无法直接对类的数据进行操作,如果想让类外的函数实现对私有成员的访问只能将属性设置为public ,但是这样的做法有破坏了数据的私有属性,这时候怎么办呢?我们的友元函数可以在类外实现对类内数据的操作,友元函数可以访问我们类内私有的数据成员,今天我们一起来看看什么是友元函数。
应该注意以下几点
我们在定义或使用应该类的友元函数时我们需要注意以下几点:
1、必须在类内说明是友元函数,在类内函数声明函数的时候在最前面加上关键字friend。
2、友元函数不是类的成员函数,它在类外定义时和普通函数一样不用加“::”来声明作用域。
3、友元函数不能访问类的成员,只能访问我们对象的成员。
4、友元函数可以访问对象的私有成员,但是普通的函数不可以。
5、在调用友元函数在实际参数中需要指出要访问的对象。
6、类与类之间的友元函数不能继承。
代码实现
下面的代码中定义一个class stu ,数据成员是私有属性,出来类内的函数可以直接访问其他方式并不可以直接访问,在类外写了一个修改名字的函数,这时候我们change函数旭阳访问我们类内私有数据成员,之后我们就需要正在类内把change函数申请为stu类的友元函数,在声明的最前面加上关键字friend这样声明之后我们函数就可以访问对象中的私有数据成员。
#include<iostream>
#include<string>
using namespace std;
class stu
{
private:
string name;
public:
stu(string name):name(name)
{ }
void display()
{ cout<<"名字:"<<name<<endl; }
friend void change(stu &s,string name);
};
void change(stu &s,string name)
{ s.name= name; }
int main()
{
stu s1("张三");
s1.display();
cout<<"修改后"<<endl;
change(s1,"李四");
s1.display();
}
代码结果分析
经过类外的函数change就实现了对象内私有数据的访问与修改。
总结
我们的友元可以是一个函数,也可以是一个类,我们友元函数从语法上看和普通函数没有什么区别,它的特点是:可以访问类中私有成员的非成员函数,成员函数和非成员函数的最大区别是我们的成员函数可以是虚的,但是我们的非成员函数不行。关于友元函数我们就简单地说到这里,希望读到这里的你对友元函数有一定的了解,能够学习到一些东西。