C++中友元函数与友元类的示例分析
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,小编给大家分享一下C++中友元函数与友元类的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、问题背景对类的封装是
千家信息网最后更新 2026年11月03日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安全错误
数据库的锁怎样保障安全
互联网科技海报
百单网互联网科技有限公司怎么样
互联网科技行业发展
工业互联网科技新基建
盈实互联网科技
互联网科技卖菜
互联网与科技发展
互联网金融 科技
互联网科技宣传片
科技伦理 互联网公司
深圳前海聚择互联网科技有限公司
互联网时代科技改变生活
长沙茂晟互联网科技有限公司
山东有哪些互联网科技公司
上海京穆互联网科技有限公司
本届互联网大会上的黑科技
深圳互联网科技园地址
互联网科技品牌
保山浩联互联网科技有限公司
瑞安市蟠桃会互联网科技有限公司
互联网科技园
云电互联网科技
银优互联网科技有限公司
天扬科技互联网广告
承德科技产业互联网发展
成都互联网科技公司工作好不好
想开互联网科技公司怎么样
科技互联网的核心竞争力
广州百诚互联网科技有限公司官网
工业互联网科技创业