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

《C++ primer plus》精炼(OOP部分)——对象和类(5)

“学习是照亮心灵的火炬,它永不熄灭,永不止息。”

文章目录

  • 类的自动和强制类型转换
    • 原始类型转换为自定义类型
    • 将自定义类型转换为原始类型

类的自动和强制类型转换

原始类型转换为自定义类型

可以用一个参数的构造函数来实现,例如:

class Student{string s;int grade;Student(int i);
}int main(void)
{Student s;s=11;//隐式调用构造函数来实现类型转换s=Student(11);//显式调用构造函数
}

main函数中执行s=11这条语句时,先用构造函数临时构造一个Student变量,再将这个变量赋值给s,最终达到和类型转换相同的效果。
另外,如果声明了explicit关键字,那么不能隐式调用构造函数构造临时变量,只能显式调用:

//两种显式调用构造函数的方法
s=Student(11);
s=(Student)11;

这种转化方式也允许先进行原始类型之间的转换:

//先将double类型的参数转换为int类型,再进行类型转换
s=Student(11.3);
s=(Student)11.3;
s=11.3;

注意,这种构造函数可能引起二义性:

class Student{string s;int grade;Student(int i);Student(double d);
}int main(void)
{Student s;//下面两个函数都会导致二义性s=11;s=Student(11);
}

在这种情况下,11既可以作为int参数调用构造函数,也可以先转换为double参数,然后调用构造函数。

将自定义类型转换为原始类型

将自定义类型转换为其他类型需要特定的转换函数:

operator typename();

转换函数有以下几个特点:

  • 转换函数必须是类方法
  • 转换函数不能指定返回类型
  • 转换函数不能有参数

例如:

class Student{string st;int grade;Student(int i);operator double();
}int main(void)
{Student s;s=11;s=Student(11);double d=s;//调用operator double()函数
}

转换函数也会导致二义性:

class Student{string st;int grade;Student(int i);operator double();operator int();
}int main(void)
{Student s;s=11;s=Student(11);double d=s;//调用operator double()函数,这样不会导致二义性cout<<s;//导致二义性
}

在最后一句中,s既可以转换成double类型,也可以转换成int类型,因此会导致二义性。但是如果进行强制类型转换就不用担心这个问题:

cout<<<(double)s;//不会导致二义性

和构造函数一样,转换函数也可以用explicit关键字来表明必须使用显示类型转换。
请添加图片描述
我是霜_哀,在算法之路上努力前行的一位萌新,感谢你的阅读!如果觉得好的话,可以关注一下,我会在将来带来更多更全面的知识讲解!

http://www.lryc.cn/news/168784.html

相关文章:

  • 钉钉旧版服务端SDK支持异步方法的升级改造
  • 【C语言】【数据存储】用%d打印char类型数据,猜结果是啥
  • 算法——双指针
  • 【PowerQuery】Excel的PowerQuery按需刷新
  • Django REST Farmowork初探
  • 【flink进阶】-- Flink kubernetes operator 版本升级
  • Linux Ubuntu20.04深度学习环境快速配置命令记录
  • 信息安全三级真题一
  • RK3568-tftp更新设备树和内核nfs挂载文件系统
  • FIR滤波器简述及FPGA仿真验证
  • 高速信号处理板资料保存:383-基于kintex UltraScale XCKU060的双路QSFP+光纤PCIe 卡设计原理图
  • QT:使用分组框、单选按钮、普通按钮、标签、行编辑器、垂直分布、水平分布做一个小项目
  • 封装微信小程序隐私信息授权
  • 【C#】FileInfo类 对文件进行操作
  • python中的字符串也是可迭代对象吗?
  • C++ 图像线特征提取【HoughLinesP算法】
  • Stable Diffusion WebUI内存不够爆CUDA Out of memory怎么办?
  • 模板学堂|数据可视化仪表板大屏设计流程梳理
  • 基于Xml方式Bean的配置-Bean的延时加载
  • python之pyQt5实例:Matplotlib的应用
  • 智囊AI-基于 ChatGPT 的 AI 工具产品 你的私人AI助手
  • nginx配置vue前端代理
  • 【C语言】【数据存储】用%u打印char类型?用char存128?
  • git-git命令汇总
  • 自定义实现简易版ArrayList
  • React中的Hooks--useReducer()
  • DM@数理逻辑@命题公式及其赋值@真值表@公式分类
  • HTTP协议(超级详细)
  • leetcode做题笔记135. 分发糖果
  • Oracle数据库体系结构(三)_逻辑结构