2022-2-13 转换函数(conversion function) non-explicit-one argument ctor explicit-one argument ctor
学习时间及标题:
2022-2-13 转换函数(conversion function) non-explicit-one argument ctor explicit-one argument ctor
学习内容:
1.转换函数(conversion function):
这是一个将分数(Fraction)类型转化为double类型的例子。我们可以看出转换函数不需要指明返回值类型,因为operator后面就给出了要返回的类型。
当编译double d=4+f;一句时,编译器会做如下尝试:
1.有没有重载运算符+,其左右两边参数类型为double类型和Fraction类型,但这里没有。
2.然后编译器又想,那能否将Fraction类型转换为double类型,然后参与运算,发现有转换函数可以实现。
2.non-explicit-one argument ctor和 explicit-one argument ctor:
non-explicit-one argument ctor指的就是具有一个实参的构造函数且前面没有关键字explicit。反之explicit-one argument ctor指的就是有关键字explicit的具有一个实参的构造函数。
注意:实参(argument)和参数(parameter)是不同的,例如图中的Fraction类的构造函数就是有两个参数,但只有一个实参-num。
当编译Fraction d2=f+4;一句时,编译器会做如下尝试:
1.看看Fraction这个类里有没有运算符+,发现有,但是运算符+右边也得是Fraction。
2.然后编译器又想,那能否将4转换为Fraction类型,发现可以,然后就将4转换为Fraction类然后参与运算。
这里4转换为Fraction类型是通过隐式转换的方式进行的。
如果构造函数只接受一个实参,则它实际上定义了转换为此类类型的隐式转换机制
根据上图,我们可以知道当运算符+的重载和转换函数同时出现时,会报错。
当编译Fraction d2=f+4;一句时,让我们看看错误出在哪里:
当编译器看到这一句时,发现有两条路可以走,一条是将4转换为Franction类型参与运算,另一条是将f转换为double类型参与运算。于是编译器就不知道怎么办了。
而当我们像上图一样,在构造函数前加关键字explicit后,仍然报错。
当编译Fraction d2=f+4;一句时,让我们看看错误出在哪里:
当构造函数前加上关键字explicit后,编译器就无法将4通过隐式转换将其转换为Fraction。
2022-2-13 转换函数(conversion function) non-explicit-one argument ctor explicit-one argument ctor相关推荐
- C++学习笔记 转换函数(conversion function)
#include <iostream> using namespace std;class Fraction // 分数 { public:explicit Fraction(int nu ...
- c++ 转换函数 convert function
学习侯捷老师视频,做了如下测试code #include<iostream> #include<vector> #include<string> //#includ ...
- C++学xuexi (6)转换函数
转换函数conversion function 将分子转换成double 转换函数,没有返回类型,返回类型就是前面的double.转换函数通常是const函数 上面的计算式4+f有两种转换方式: 第一 ...
- C++转换函数 (conversion function)
本文将介绍C++中的转换函数(conversion function). 1.代码 设计一个类Fraction表示分数,包含分子和分母.我们希望它能自动转换为double类型,并参与运算. Fract ...
- c语言英文字符转数字,C语言常用数字和字符串转换函数(国外英文资料).doc
C语言常用数字和字符串转换函数(国外英文资料) C语言常用数字和字符串转换函数(国外英文资料) C language commonly used Numbers and string conversi ...
- C++11新特性之八——函数对象function
http://www.cnblogs.com/yyxt/p/3987717.html 详细请看<C++ Primer plus>(第六版中文版) http://www.cnblogs.co ...
- java 大小写转换函数_不使用Java中的任何库函数将大写转换为小写
java 大小写转换函数 Given a string and we have to convert it from uppercase to lowercase. 给定一个字符串,我们必须将其从大写 ...
- MYSQL 获取当前日期及日期格式,和常用时间转换函数
经过多次尝试本人的目标完成: select newworkorder.WorkOrderNum,newworkorder.ProjectCode, newworkorder.WorkEstComDat ...
- C++转换构造函数和隐式转换函数
今天是第一次听到C++还有个转换构造函数,之前经常见到默认构造函数.拷贝构造函数.析构函数,但是从没听说过转换构造函数,隐式转换函数也是一样,C++的确是够博大精深的,再次叹服! 其实我们已经在C/C ...
最新文章
- CVPR2021直播|点云补全的方法梳理及最新进展分享
- Linux学习:vim 的 3 种命令模式及基本操作
- uva 1611——Crane
- mybatis学习(54):鉴定器
- java11创建项目_2019-04-11 使用IDEA创建SpringBoot项目
- arm ida 伪代码 安卓 符号表_IDA 制作 sig文件 gdb 导入符号表
- css中的换行符_如何使用CSS防止项目列表中的换行符?
- babyion 加载obj模型_在vue中使用babylonjs引入3d模型,打印mesh数据正常且无报错,但未在场景中显示,请问是什么环节出现了问题?...
- 【方便自己使用】KKT条件
- np.linalg 线性代数
- Python基础语法-01-类及对象
- 阅读芯片手册与STC16F40K128芯片手册阅读
- 萤石云平台接入_新手上路 老司机教你配置萤石云
- DAS、NAS、SAN简介以及区别
- 阿米诺 海韵键盘 背光灯和模式 设置
- editplus里python技巧_editplus调试python
- Windows+cygwin下构造arm-linux交叉编译环境最简单的方法
- Java中2.5D游戏(斜45度角)的设计与实现(1)
- CSDN第11期周赛
- 模拟电路-振荡电路、振荡电路类型 (一)