学习时间及标题:

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相关推荐

  1. C++学习笔记 转换函数(conversion function)

    #include <iostream> using namespace std;class Fraction // 分数 { public:explicit Fraction(int nu ...

  2. c++ 转换函数 convert function

    学习侯捷老师视频,做了如下测试code #include<iostream> #include<vector> #include<string> //#includ ...

  3. C++学xuexi (6)转换函数

    转换函数conversion function 将分子转换成double 转换函数,没有返回类型,返回类型就是前面的double.转换函数通常是const函数 上面的计算式4+f有两种转换方式: 第一 ...

  4. C++转换函数 (conversion function)

    本文将介绍C++中的转换函数(conversion function). 1.代码 设计一个类Fraction表示分数,包含分子和分母.我们希望它能自动转换为double类型,并参与运算. Fract ...

  5. c语言英文字符转数字,C语言常用数字和字符串转换函数(国外英文资料).doc

    C语言常用数字和字符串转换函数(国外英文资料) C语言常用数字和字符串转换函数(国外英文资料) C language commonly used Numbers and string conversi ...

  6. C++11新特性之八——函数对象function

    http://www.cnblogs.com/yyxt/p/3987717.html 详细请看<C++ Primer plus>(第六版中文版) http://www.cnblogs.co ...

  7. java 大小写转换函数_不使用Java中的任何库函数将大写转换为小写

    java 大小写转换函数 Given a string and we have to convert it from uppercase to lowercase. 给定一个字符串,我们必须将其从大写 ...

  8. MYSQL 获取当前日期及日期格式,和常用时间转换函数

    经过多次尝试本人的目标完成: select newworkorder.WorkOrderNum,newworkorder.ProjectCode, newworkorder.WorkEstComDat ...

  9. C++转换构造函数和隐式转换函数

    今天是第一次听到C++还有个转换构造函数,之前经常见到默认构造函数.拷贝构造函数.析构函数,但是从没听说过转换构造函数,隐式转换函数也是一样,C++的确是够博大精深的,再次叹服! 其实我们已经在C/C ...

最新文章

  1. CVPR2021直播|点云补全的方法梳理及最新进展分享
  2. Linux学习:vim 的 3 种命令模式及基本操作
  3. uva 1611——Crane
  4. mybatis学习(54):鉴定器
  5. java11创建项目_2019-04-11 使用IDEA创建SpringBoot项目
  6. arm ida 伪代码 安卓 符号表_IDA 制作 sig文件 gdb 导入符号表
  7. css中的换行符_如何使用CSS防止项目列表中的换行符?
  8. babyion 加载obj模型_在vue中使用babylonjs引入3d模型,打印mesh数据正常且无报错,但未在场景中显示,请问是什么环节出现了问题?...
  9. 【方便自己使用】KKT条件
  10. np.linalg 线性代数
  11. Python基础语法-01-类及对象
  12. 阅读芯片手册与STC16F40K128芯片手册阅读
  13. 萤石云平台接入_新手上路 老司机教你配置萤石云
  14. DAS、NAS、SAN简介以及区别
  15. 阿米诺 海韵键盘 背光灯和模式 设置
  16. editplus里python技巧_editplus调试python
  17. Windows+cygwin下构造arm-linux交叉编译环境最简单的方法
  18. Java中2.5D游戏(斜45度角)的设计与实现(1)
  19. CSDN第11期周赛
  20. 模拟电路-振荡电路、振荡电路类型 (一)

热门文章

  1. 移动宽带套餐介绍_中国移动宽带最新套餐介绍
  2. 小学教师评职称计算机考试题,中小学美术教师职称晋升招聘考试题库(含答案)1...
  3. 西安恒智小寨java_长安反编译工具 java
  4. mxgraph初体验
  5. 软件功能测试概论(课堂练习1)
  6. 暗黑类游戏的设计概念
  7. 光控可控硅有过零检测和无过零检测区别
  8. 64马8赛道取前4问题
  9. 什么是网络智能运维?如何保障业务7x24小时在线?
  10. 在github搭建自己写的网页