• 不同类型数据间的转换


            对于标准数据类型的转换,编译系统会给出说明,会让我们知道是怎样进行转换。而对用户自己声明的类型,编译系统并不知道怎样进行类型转换,解决这个问题的关键是让编译系统知道怎样去进行转换,这就需要定义一些专门的函数类处理。

    1、转换构造函数

        转换构造函数的作用是将一个其他类型的数据转换成一个类的对象,这里我们以复数类Complex为例,我们来介绍一下,转换构造函数。

    转换构造函数是构造函数的重载,它只有一个形参,例:

    1. Complex (double r)
    2. {
    3. _real = r;
    4. _imaginary = 0;
    5. }

            其作用是将double类型的参数r转换成Complex类的对象,将r作为复数的实部,虚部为0。用户可以自己根据需要定义转换构造函数,在函数体中告诉编译系统怎样去进行转换。在类体中,可以有构造函数,也可以没有转换构造函数,根据情况而定,假如在Complex类中定义了上面的转换构造函数,在Complex类的作用域中有以下声明语句:

    Complex c (2.8)         // 初始化对象c,有一个参数,就会调用转换构造函数

            初始化对象c,实部为2.8,虚部为零。他的作用就是将double类型的常数转换为一个名为c的Complex类对象。

    如果已经对+运算符进行了重载,使之能进行两个Complex类对象的相加则:

    1. c1 = c + 1.4; //错误,不能让一个Complex类对象与浮点数相加
    2. c2 = c + Complex (1.4); //正确,转换构造函数把1.4转为Complex类的对象

            不仅可以将一个标准类型数据转换成类对象,也可以将另一个类的对象转换成转换构造函数所在的类的对象。

    2、类型转换函数

            类型转换函数的作用是将一个类对象转换成另一类型的数据。假设已经声明了复数类Complex,则可以这样定义类型转换函数:

    1. operator double()
    2. {
    3. return _real;
    4. }

            函数返回double型变量_real的值。它的作用是将一个Complex类的对象转换成一个double类型的数据,其返回值是Complex类中数据成员_real的值。

            注意,这个函数不能指定类型,没有参数,operator double是函数名,这回运算符重载是一样的。类型转换函数一般的写法是:

    operator 类型名()

    {实现转换的语句}

  • 相关阅读:
    VLAN 配置案例
    黄仁勋最新建议:找到一门技艺,用一生去完善、磨炼!
    有创意且简美大气的图表-堆叠极扇图
    10.1K star !牛逼了!开源技术速查表,推荐人手一份!
    说JS作用域,就不得不说说自执行函数
    软件应用开发安全指南
    RAG 高级应用:基于 Nougat、HTML 转换与 GPT-4o 解析复杂 PDF 内嵌表格
    电销外呼系统主要有哪些作用?
    Redis 规范部署手册
    【AcWing】第 62 场周赛 【2022.07.30】
  • 原文地址:https://blog.csdn.net/Grey_Pigeon/article/details/126317555