C++中友元函数与友元类的示例分析
发表于:2024-11-12 作者:千家信息网编辑
千家信息网最后更新 2024年11月12日,小编给大家分享一下C++中友元函数与友元类的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、问题背景对类的封装是
千家信息网最后更新 2024年11月12日C++中友元函数与友元类的示例分析
小编给大家分享一下C++中友元函数与友元类的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
一、问题背景
对类的封装是C++三大特性中的一个重要特性,封装好的数据在类的外部是访问不到的但是一旦出了问题,想要操作被封装的数据怎么办呢?由此友元函数友元类诞生了。在类中用friend
关键字声明的函数或类,可以对类体中的任何权限成员属性进行操作
有好处就有坏处友元函数、友元类严重破坏类的封装性,不到迫不得已不要使用。
二、友元函数
声明部分: friend 返回类型 函数名 (参数列表);
定义部分:返回类型 函数名 (参数列表){
函数体,在这个函数体中可以对相应对象的成员变量用运算符进行操作
};
友元函数就是一个全局函数,成为了某类的朋友,可以随意修改他的私有属性。
具体使用方法如下:
#includeusing namespace std;class test_Y {private: int a; int b;public: test_Y(int a=0,int b=0) { this->a = a; this->b = b; } int getA() { return a; } int getB() { return b; } void print() { cout << "a:" << a << " " << "b:" << b << endl; } void tran2(); friend void tran1(test_Y& a); void tran3(test_Y &a) { a.a = 0; a.b = 0; }};void tran1(test_Y& a) {//传进去的是要改变的对象; a.a = 100;//类的友元函数对变量的操作方法; a.b = 100;}void test_Y::tran2() { this->a = 200;//类的成员函数对变量的操作方法; this->b = 200;//类中的私有成员变量只能在类体内访问不可以在类体外进行访问}//在类体外的成员函数中也不行;在类体内就可以通过成员符对成员变量进行操作;int main() { test_Y a1(1, 2),a2(3,4); a1.tran2(); a1.print(); tran1(a2); a2.print(); a2.tran3(a2); a2.print(); return 0;}
友元函数在进行流运算符重载的时候非常实用。
三、友元类
声明部分:friend 类名;
语法部分:在友元类中对另一个类中的成员属性进行操作;
友元类会破坏类的封装性要慎用;
具体使用方法如下:【将B类设置为A类的友元类】
#includeusing namespace std;class A {private: int a; int b;public: A(int a = 0, int b = 0) { this->a = a; this->b = b; } void setAB(int a = 0, int b = 0) { this->a = a; this->b = b; } void print() { cout << a<<" "<< b << endl; }//************************重点保护区******************************** friend class B;//如果去掉就不可以访问;类的嵌套也可以完成相互的初始化};//但是不可以在另一个类中直接对类的私有属性进行访问;(去掉friend关键字显而易见会报错);class B {//************************保护重点,人人有责****************************private: int a; int b;public: B(int a=0,int b=0) { this->a = a; this->b = b; } void BuseA(A &a) {//B使用A类对象的属性 this->a = a.a;//将类A对象的成员变量赋值给B类对象的成员变量; this->b = a.b; } void BsetA(A &a) {//B对象的属性初始化A类对象的属性 a.a = this->a; a.b = this->b; } void print() { cout << a << " " << b << endl; }};int main() { B b1(1, 2); A a1(3, 4); b1.BsetA(a1);//B设置A; a1.print(); a1.setAB(100, 200);//对A的对象a1重新赋值;用于测试下面是否能够改变B; b1.BuseA(a1);//B的对象在A对象的基础之上初始化; b1.print();}
友元类,在不到迫不得已的时候,不要使用。友元函数在进行
以上是"C++中友元函数与友元类的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
函数
成员
对象
变量
属性
封装
部分
C++
方法
篇文章
示例
中友
分析
迫不得已
使用方法
内容
参数
数据
时候
特性
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库设计长度和字节
数据库原理与技术课程推荐书
中国网络安全十大青年
录音如何上传服务器
电脑有网显示连接邮箱服务器失败
东南融通数据库工程师
服务器如何加装提前制作的地图
软件开发选取适宜的开发模型
不履行网络安全保护义务罚款
服务器老是重启
ArcGIS拆分数据库
手机小程序授权服务器异常怎么弄
计算机网络技术考研好考吗
服务器 远程重启
漳州市金泉网络技术有限公司
数据库追踪器
四川计算机软件开发哪家实惠
超酷视频软件开发
网络技术服务费摘要
澳洲网络安全专业留学
数据库设计长度和字节
服务器文件名出现乱码
三十一岁开始做软件开发
数据库中having
矩阵直销软件开发
数据库语句备份空记录表
诛仙linux数据库怎么设置
严格把关网络安全意识
vm怎么设置成单机服务器
车厘子互联网络科技有限公司