再读c++primer plus 006
使用类:
1.重载限制:(1)重载后的运算符必须至少有一个操作数是用户定义的类型,这将防止用户为标准类型重载运算符
(2)使用运算符时不能违反运算符原来的语法规则,不能修改运算符的优先级
(3)不能创建新运算符
(4)不能重载下面的运算符:
.:成员运算符
sizeof
.*:成员指针运算符
:::作用域解析运算符
?::条件运算符
typeid:一个RTTL运算符
const_cast :强制类型转换运算符
dynamic_cast:强制类型转换运算符
reinterpret_cast:强制类型转换运算符
static_cast:强制类型转换运算符,
(5)=,(),[ ],->只能通过成员函数进行重载
2.友元
(1)创建友元的第一步是将其原型放在类声明中,并在其前加上friend
第二步编写函数定义,因为它不是成员函数,所以不用使用::
(2)友元是否有悖于OOP:只有类声明可以决定哪一个函数是友元,因此类声明仍然控制了哪些函数可以访问私有数据,总之,类方法和友元只是表达类接口的两种不同机制
3.类的自动和强制类型转换
(1)隐式转换:程序将使用构造函数来创建一个临时对象并将值赋给它,随后采用逐成员赋值方式将该临时对象的内容赋值到待转换的对象。
(2)将构造函数用作自动类型转换函数似乎是一项不错的特性,然而,当程序员拥有更丰富的c++经验时,将发现这种自动特性并非总是合乎需要的,因为这将导致意外的类型转换,因此c++新增了关键字explicit用于关闭这种特性,这么声明的函数将只用于显示强制类型转换,否则还可以用于隐式类型转换。
(3)转换函数:转换函数是用户定义的强制类型转换,可以像使用强制类型转换那样使用它们
转换函数必须是类方法,转换函数不能指定返回类型,转换函数不能能有参数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了