友元函数能访问成员吗,友元函数访问私有成员

首页 > 实用技巧 > 作者:YD1662024-01-10 05:12:19

友元函数

我们知道在c 中类具有封装、继承、多态、数据私有化的特性,一般的类外函数无法直接对类的数据进行操作,如果想让类外的函数实现对私有成员的访问只能将属性设置为public ,但是这样的做法有破坏了数据的私有属性,这时候怎么办呢?我们的友元函数可以在类外实现对类内数据的操作,友元函数可以访问我们类内私有的数据成员,今天我们一起来看看什么是友元函数。

友元函数能访问成员吗,友元函数访问私有成员(1)

应该注意以下几点

我们在定义或使用应该类的友元函数时我们需要注意以下几点:

1、必须在类内说明是友元函数,在类内函数声明函数的时候在最前面加上关键字friend。

2、友元函数不是类的成员函数,它在类外定义时和普通函数一样不用加“::”来声明作用域。

3、友元函数不能访问类的成员,只能访问我们对象的成员。

4、友元函数可以访问对象的私有成员,但是普通的函数不可以。

5、在调用友元函数在实际参数中需要指出要访问的对象。

6、类与类之间的友元函数不能继承。

友元函数能访问成员吗,友元函数访问私有成员(2)

代码实现

下面的代码中定义一个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就实现了对象内私有数据的访问与修改。

友元函数能访问成员吗,友元函数访问私有成员(3)

总结

我们的友元可以是一个函数,也可以是一个类,我们友元函数从语法上看和普通函数没有什么区别,它的特点是:可以访问类中私有成员的非成员函数,成员函数和非成员函数的最大区别是我们的成员函数可以是虚的,但是我们的非成员函数不行。关于友元函数我们就简单地说到这里,希望读到这里的你对友元函数有一定的了解,能够学习到一些东西。

友元函数能访问成员吗,友元函数访问私有成员(4)

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.