在C++中关于友元函数的进一步理解
2019/7/10 22:32:26
本文主要是介绍在C++中关于友元函数的进一步理解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
这里重新将类的成员函数的定义看一下:
百科上的认识:
类的成员函数的原型要写在类体中,原型说明了函数的参数表和返回值类型。而函数的定义一般在类外面,也可以直接在类内部定义。前者与普通函数不同的是,实现成员函数时要指明类的名称,具体形式为:
- 返回值类型 类名 :函数成员名(参数表){函数体};
- 而后者一般为一些短小的函数(5行以内),也就是内联函数。
这里在百科上对友元函数的解释:
友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)。
1.为什么要使用友元函数
优点:能够提高效率,表达简单、清晰。
也有缺点:破坏了程序的封装性。有时候不到万不得已的时候才使用。
代码解释:
#include <iostream> #include <string> using namespace std; class ca { string id; void setId(string s) { id = s; } protected: string name; void setName(string s) { name = s; } public: void print() { cout << id << " " << name << " " << endl; } friend void fun(ca& a); //申明全局函数作友元,允许它访问私有保护成员 }; class derive : public ca { }; //ca类的派生类 void fun(ca& a) { //作友元的函数要定义在那个类的后面 a.id = "987"; //这是ca类的私有成员 a.setName("xyz"); //这是ca类的保护成员 } int main ( ) { ca a; //a.fun(...); //友元函数不是当前类的成员函数,所以这句编译出错 fun(a); a.print(); derive d; fun(d); //作参数时,类型转换为ca类 d.print(); return 0; }
运行结果:
987 xyz
987 xyz
在就是友元函数的位置:可以在类外或者类内
声明方式:friend+普通函数声明
实现方式:像普通函数那样直接调用
还有一点的是:其实一些操作符的重载实现也是要在类外实现的,那么通常这样的话,声明为类的友元是必须滴。(这就像我学的那个坐标类,直接用操作符重载,声明友元函数)
最后一个知识点:
友元函数和类的成员函数的区别:
1.成员函数有this指针,而友元函数没有this指针。
2.友元函数是不能被继承的,就像父亲的朋友未必是儿子的朋友。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对找一找教程网的支持。如果你想了解更多相关内容请查看下面相关链接
这篇关于在C++中关于友元函数的进一步理解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26RocketMQ入门指南:搭建与使用全流程详解
- 2024-11-26RocketMQ入门教程:轻松搭建与使用指南
- 2024-11-26手写RocketMQ:从入门到实践的简单教程
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享