C++第04课 友元
时间:2021-09-05
本文章向大家介绍C++第04课 友元,主要包括C++第04课 友元使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.友元
friend关键字,友元赋予对象具有打破权限限定的一个功能,并不是能够直接访问类中数据
2.友元函数
在类中用friend修饰的函数 称之为友元
在友元函数中 的对象具有打破权限限定,以一个对象为参数或者在当前函数中定义的对象,友元函数不属于类,所以不受权限限定
+ 普通函数是友元函数
class Girl { friend void print(Girl obj); friend Girl* returnObj(); public: string name; protected: int age; private: int money; }; //友元函数不属于类,在类外实现时不需要类名限定 void print(Girl obj) { obj.age = 19; obj.money = 19999; obj.name = "ILoveYou"; } Girl* returnObj() { Girl* p = new Girl; p->name = "小可爱"; p->money = 10000; p->age = 18; return p; } int main() { Girl g; g.name = "hello"; //脱离了友元函数就受权限限定,打破权限仅限在友元函数中 cout << returnObj()->name << endl; //无法访问 //g.age = 12; //g.money = 1230; return 0; }
+ 另一个类型的成员函数是友元函数
MM类中有一个友元函数是GG类的成员函数叫做print(MM obj)
声明MM类型: class MM
GG类定义: class GG{ .... }
MM类定义 class MM{ .... }
Bf函数的实现 GG::print(MM obj){}
//固定写法 class MM; class GG { public: string name; void print(MM obj); protected: void print() { cout << name << endl; } }; class MM { friend void GG::print(MM obj); public: string name; protected: void print() { cout << name << endl; } };
3.友元类
在A类中声明B类为友元类,B类中所有A类的对象都具有无视权限限定的一个功能。
class A { friend class B; public: A(int a):a(a){} protected: int a; private: void print() { cout << a << endl; } }; class B { public: void print(A obj) { cout << obj.a << endl; obj.print(); } protected: int b; private: void print() { cout << b << endl; } };
原文地址:https://www.cnblogs.com/creature-lurk/p/15230758.html
- Flash/Flex学习笔记(50):3D线条与填充
- LVM常规操作记录梳理(扩容/缩容/快照等)
- Flash/Flex学习笔记(55):背面剔除与 3D 灯光
- 资源等待类型sys.dm_os_wait_stats
- NVIDIA不再允许数据中心用GeForce驱动,提供区块链服务除外
- 非常强悍并实用的双机热备+负载均衡线上方案
- Apache 压力测试工具ab
- SQL之收集SQL Server线程等待信息
- 聚合索引(clustered index) / 非聚合索引(nonclustered index)
- 域名资讯:单词域名can.com以15.5万美金成功交易
- jQuery无缝图片横向(水平)/竖向(垂直)滚动
- Centos下MooseFS(MFS)分布式存储共享环境部署记录
- MFS+Keepalived双机高可用热备方案操作记录
- Docker容器学习梳理-容器时间跟宿主机时间同步
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 不支持图形化界面的Linux系统如何显示图像化界面?飞腾服务器显示图像化界面方法,DISPLAY environment variable is undefined问题解决方法
- 一分钟学Python| Python的函数(上)
- 数据分析与数据挖掘 - 07数据处理
- MySql8.0.19最新版本创建用户分配权限演示,You have an error in your SQL syntax权限分配问题解决方法
- linux服务器oracle数据库导出dmp文件功能演示,备份数据库命令。exp命令显示command not found解决方法,EXP-00028: 无法打开dmp进行写入问题解决
- oracle数据库exp命令导入导出dmp文件演示,oracle数据库备份还原功能
- oracle数据库impdp导入dmp文件功能演示,imp导入IMP-00038: Could not convert to environment character sets handle问题解决
- 弄懂这 5 个问题,拿下 Python 迭代器!
- windows、linux下命令行登录oracle数据库方法,查询sga参数值sql语句
- oracle数据库查询open_cursors值的sql语句,达梦数据库查询MAX_SESSION_STATEMENT值方法,MAX_SESSION_STATEMENT的最大值、上限是多少。
- 达梦数据库启用日志方法,达梦数据库查看日志是否启用,达梦数据库日志文件位置查找
- JavaScript 技术篇 - js 查看哪个元素获取了焦点,js 指定元素获取焦点方法
- 工作10年后,再看String s = new String("xyz") 创建了几个对象?
- Linux达梦数据库:通过disql登录命令行操作数据库,打开达梦数据库自带的数据库管理连接工具
- Dbvis数据库连接工具将查询出数据转化为sql插入语句方法