请选择 进入手机版 | 继续访问电脑版

[C 语言] C++ 转换函数用法案例详解

[复制链接]
查看61 | 回复16 | 2021-9-14 09:24:41 | 显示全部楼层 |阅读模式

1.标准数据之间会举行 隐式范例 安全转换,规则如下:

C++ 转换函数用法案例详解

 在这里重要 探究 c++中类范例 与平常 范例 的转换:

1.类范例 转换平常 范例

  1. class Fraction
  2. {
  3. public:
  4. Fraction(int num,int den=1);
  5. ~Fraction();
  6. //转换函数
  7. /*
  8. 转换函数语法规则:
  9. operator Type()
  10. {
  11.       Type ret ;
  12.       ........
  13.       return ret;
  14.     }
  15. */
  16. operator double() const {
  17. return (double)(m_Numerator*1.0 / m_Denominator);
  18. }
  19. private:
  20. int m_Numerator;
  21. int m_Denominator;
  22. };
  23. Fraction f(3, 5);
  24. double d = 4 + f;//d=4.6
复制代码

这里4+f,调用转换函数将f转换为0.6

2.平常 范例 转换为类范例 (non-explicit-one-argument ctor)

  1. class Fraction
  2. {
  3. public:
  4. Fraction(int num,int den=1);
  5. ~Fraction();
  6. Fraction operator+(const Fraction& f) {
  7. return Fraction(this->m_Numerator * f.m_Denominator + this->m_Denominator * f.m_Numerator,
  8. f.m_Denominator * this->m_Denominator);
  9. }
  10. private:
  11. int m_Numerator;
  12. int m_Denominator;
  13. };
  14. Fraction f(3, 5);
  15. Fraction d = f + 4;//调用+运算符函数,4会转为Fraction(4,1),含有接受一个参数的构造函数,否则也无法转换
复制代码

3.同时含有转换函数和可以隐式的调用构造函数(转换构造参数)会报错

  1. class Fraction
  2. {
  3. public:
  4. /*
  5. 转换构造函数:
  6. -有仅有一个参数
  7. -参数是基本类型
  8. -参数是其它类型
  9. */
  10. Fraction(int num,int den=1);
  11. ~Fraction();
  12. operator double() const {
  13. return (double)(m_Numerator*1.0 / m_Denominator);
  14. }
  15. Fraction operator+(const Fraction& f) {
  16. return Fraction(this->m_Numerator * f.m_Denominator + this->m_Denominator * f.m_Numerator,
  17. f.m_Denominator * this->m_Denominator);
  18. }
  19. private:
  20. int m_Numerator;
  21. int m_Denominator;
  22. };
复制代码

报错:   “Fraction::operator +”: 2 个重载有相似的转换    ,

以是 在我们写构造函数都会利用 关键字 explicit 防止范例 隐式转换

  1. class Fraction
  2. {
  3. public:
  4. explicit Fraction(int num,int den=1);
  5. ~Fraction();
  6. operator double() const {
  7. return (double)(m_Numerator*1.0 / m_Denominator);
  8. }
  9. Fraction operator+(const Fraction& f) {
  10. return Fraction(this->m_Numerator * f.m_Denominator + this->m_Denominator * f.m_Numerator,
  11. f.m_Denominator * this->m_Denominator);
  12. }
  13. private:
  14. int m_Numerator;
  15. int m_Denominator;
  16. };
  17. Fraction f(3, 5);
  18. Fraction d = f + 4;//报错:不存在从 "double" 转换到 "Fraction" 的适当构造函数
  19. double d = f + 4;//可以,f转换
复制代码

到此这篇关于C++ 转换函数用法案例详解的文章就先容 到这了,更多相干 C++ 转换函数用法内容请搜刮 脚本之家从前 的文章或继续欣赏 下面的相干 文章盼望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 江左岸右郧 | 2021-9-14 11:12:19 | 显示全部楼层
记得吃药!
回复

使用道具 举报

avatar 不好吃荤漳 | 2021-9-21 02:55:54 | 显示全部楼层
楼上的忘记吃药了!
回复

使用道具 举报

avatar 李亚兵 | 2021-9-21 21:59:50 | 显示全部楼层
admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的源码论坛他的站点都是商业源码,还是免费下载的那种!特别好用。访问地址:http://www.mxswl.com 猫先森网络
回复

使用道具 举报

avatar 爱无声爱留痕列 | 2021-9-25 17:43:37 | 显示全部楼层
admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的网站,他卖的服务器是永久的,我们的网站用 服务器都是在这家买的,你可以去试试。访问地址:http://fwq.mxswl.com
回复

使用道具 举报

avatar 确实是个孩子谥 | 2021-9-25 17:43:41 | 显示全部楼层
读了admin楼主的帖子,顿时马桶就通了。。。
回复

使用道具 举报

avatar 万胜 | 2021-9-26 16:56:20 | 显示全部楼层
今天不想骂人!
回复

使用道具 举报

态度决定一切,不错!
回复

使用道具 举报

admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的网站,他卖的服务器是永久的,我们的网站用 服务器都是在这家买的,你可以去试试。访问地址:http://fwq.mxswl.com
回复

使用道具 举报

admin楼主的帖子实在是写得太好了。文笔流畅,修辞得体!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则