当前位置: 首页 > news >正文

c++类【开端】

运算符重载

        方式:operator运算符(参数列表){}。

        运算符就是:+-*/[]等。

        运算符重载,和定义一个方法效果是一样的,只是,重载运算符让类的+-*/等操作看起来和普通数字的+-*/一样。仅是看起来一样。我们重载运算符,就是在做这个表面上看起来一样的背后的运行规则。就是说,为了看起来一样,重载运算符在负重前行。

重载的限制

        不是所有的运算符都可以重载。

        重载运算的操作数至少要有一个自定义的类型。

        运算规则要和之前一样,

        还有一些不能重载的运算符。

        还有一些只能重载为成员函数的运算符:=()[]->这4个,只能通过成员运行符重载。

        延伸:左侧操作数必须是调用对象。

友元

        为何需要友元?因为重载运算符左侧操作数必须是调用对象,导致有些运算重载运实现不了。比如A*3重载可以,但3*A就没法操作了。也不能用非成员函数,因为非成员函数不能访问类的内部数据。这不就尴尬了么。所以用友元来解决。友元可以访问对象的内部数据。

        友元分三种:友元函数,友元类,友元成员函数。

        友元函数:不是类的成员函数,只是把原型写在类的声明里,并以friend开始。告诉类这是个友元函数,不需要在类里实现,友元函数的定义就和普通函数一样,只是在类里用friend声明一下。

重载的运算符一般应设计成友元函数,这样,可以访问类的私有数据。

类型转换

        自动转换与强制转换:

        自动转换也可以称作 是隐式转换。转换就涉及转换函数,函数就是要定义的,但是,有些构造 函数可以转为转换函数。比如:只有一个参数的构造函数能够转换成转换函数。

        这种默认的转换在实践中发现有时不好用,所以,有些人在定义构造函数的时候,在前面加一个explicit关键字,这就是在告诉类,这个构造函数不能进行自动转换,必须要显示的调用才能转换。构造函数,只适用于将其它类型转换为自己类的这种转换,但是,如果反过来,要将类转换为其它类型。侧需要转换函数了。

        转换函数是用户自定义的强制类型转换。原型写法:operator 类型名();没有返回类型一说。

转换函数必须是类的方法,没返回值,也没有参数。但是定义里,必须返回转换后的值。

总结

        访问类的成员,唯一方法就是通过使用类的方法,但是友元避开了这个限制,解决了一些不能用的场景。

        运算符重载,运算符函数可以是成员函数,也可以是友元函数,但是一般建议定义成友元函数,可以避开第一个操作数必须是类对象的限制。

        转换函数,就是将类转换为其它类型,一般要自定义。还有就是将其它类型转换为类,这个一般可以通过只有一个参数的构造函数自动转换,通过要构造函数前加explicit可以限制自动转换,只能显性调用转换,减少出错。

相关文章:

  • weaviate v1.30.2发布!全方位优化SegmentIndex,RBAC升级兼容,OpenAI集成更智能!
  • MyBatis-Plus 非 Spring 环境使用时 `GenericTypeResolver` 缺失问题总结
  • Auto.js 脚本:清理手机数据但保留账号
  • 林业数智化转型初步设计方案
  • 「Mac畅玩AIGC与多模态19」开发篇15 - 判断节点与工具节点联动示例
  • 二项式反演 系列 题解
  • 【蓝牙协议栈】【BR/EDR】【AVCTP】精讲音视频控制传输协议
  • BUUCTF 大流量分析(一) 1
  • AUTOSAR图解==>AUTOSAR_SRS_CryptoStack
  • 从0开始学习大模型--Day01--大模型是什么
  • Linux 常用指令详解
  • tensorflow 调试
  • Lombok 是什么?
  • 014枚举之指针尺取——算法备赛
  • 【Linux网络#17】TCP全连接队列与tcpdump抓包
  • LeetCode 热题 100 78. 子集
  • 洛谷 P9007 [入门赛 #9] 最澄澈的空与海 (Hard Version)
  • N-Gram 模型
  • 基于Vue3开发:打造高性能个人博客与在线投票平台
  • Java---Object和内部类
  • 李公明 | 一周画记:生活就是抵抗
  • 新华每日电讯“关爱青年成长”三连评:青春应有多样的精彩
  • 美国警方:爱达荷州交通事故致7人死亡,8名伤者预计无生命危险
  • 美国将于6月14日举行阅兵式,美媒报当天是特朗普生日
  • 客场不敌蓉城遭遇联赛首败,申花争冠需要提升外援能力
  • 南京大屠杀幸存者刘贵祥去世,享年95岁