zoukankan      html  css  js  c++  java
  • 21.C++- ++操作符重载、隐式转换之explicit关键字、类的类型转换函数

    ++操作符重载

    • ++操作符分为前置++后置++,比如: ++a;  a++;
    • ++操作符可以进行全局函数成员函数重载
    • 重载前置++操作符不需要参数
    • 重载后置++操作符需要一个int类型的占位参数
    • 前置++操作符的返回值为*this
    • 后置++操作符的返回值为临时对象

    例如:

    转换规则如下所示:

     

    比如:

    隐式转换的隐患

    隐式转换有时会因为类型不同,得到的结果大有不同,也是常见bug之一.

    参考以下示例:

    运行打印:

    答案并非是-1000。

    同样,我们使用构造函数时,也经常使用隐式转换

    参考以下示例:

    运行打印:

    首先编译器通过-2来找只有一个参数的构造函数,发现它的参数是unsigned int,所以便将-2隐式转换为unsigned int,从而造成结果不同.

    如何解决隐式转换

    在构造函数声明的时候加上explicit关键字,便能使该函数只能进行显示转换,使用方法如下:

    添加后,再次编译Test t1=-2;时,就会报错了.

    若添加explicit后,还想继续使用隐式转换,可以通过下面3钟方法使用隐式转换:

    同样,也能支持类与类之间转换

    不过类型转换函数可能会与构造函数冲突,比如:

    编译出错,编译器不知道用哪个方式去初始化val对象,因为Value Val=t可以等价于:

    explicit关键字.

    注意:在工程中,一般都是通过 to Type()成员函数来代替类的类型转换函数,比如QT的Qstring类: 有toInt()、toDouble()等成员函数来实现类型转换


    文章来源:https://www.cnblogs.com/lifexy/p/8665780.html

  • 相关阅读:
    C#操作EXcel
    ADO.NET 导出 Excel 文件
    基于jQuery的数字键盘插件
    Python爬虫(三)——正则表达式
    python爬虫(二)——第一个爬虫程序
    python爬虫学习(一)——爬虫的工作原理
    斜率优化DP学习笔记
    可持久化线段树学习笔记
    尺取法学习笔记
    分层图学习笔记
  • 原文地址:https://www.cnblogs.com/xiongjim/p/9673951.html
Copyright © 2011-2022 走看看