C++中友元函数与友元类的示例分析
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,小编给大家分享一下C++中友元函数与友元类的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、问题背景对类的封装是
千家信息网最后更新 2025年01月19日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安全错误
数据库的锁怎样保障安全
解读网络安全知识
品质网络技术售后服务
数据库的中间件
山西app软件开发erp
我想画网络安全的手抄报图片
pc电脑查看苹果账号数据库
激活服务器管理员
新的软件开发工具
网络安全绿色上网手抄报图片
网络安全周活动内容
小组网络安全活动图片
学校网络安全试卷
重庆市的网络安全接入地址
迷你世界重要的服务器
服务器如何隐藏无关紧要的字幕
你认为国内最好的服务器是什么
存储服务器硬件有哪些
数数据库管理系统概念
燃烧的征程服务器
网络安全事故包括哪些
c3p0哪个位置是数据库名
软件开发北京个人
贵阳市网络安全办公室
中专网络安全教育
碑林软件开发价格
校园网络安全法人责任制度
2免费服务器
确定软件开发外包与否是属于
软件开发电价
数据库运行性能的指标