• 5.9 C++重载转型操作符


    参考:http://www.weixueyuan.net/view/6387.html

    注意:  

      转型构造函数可以将其它类型的参数转换为类类型,如果我们要进行相反的转换过程,将类类型转换为其它数据类型,则需重载转型操作符。转型操作符重载函数的声明语法如下:
          operator 类型名 ();
      转型操作符重载函数有几点需要注意的:

      • 函数没有返回类型;
      • 虽然没有返回类型但是函数体中必须有return语句,其返回类型是由类型名来指定的;
      • 转型操作符重载函数只能以类的成员函数的形式进行重载,而不能以友元函数或顶层函数的形式进行重载。

      转型操作符重载可以给程序带来一定的方便,但是建议还是谨慎使用。因为系统通常在需要的时候就会调用转型操作符重载函数,该函数的调用时隐式的,有时候会给程序带来一些意想不到的问题。

    --------------------------------------------------

    在前面我们已经介绍过转型构造函数,转型构造函数可以将其它类型的参数转换为类类型,如果我们要进行相反的转换过程,将类类型转换为其它数据类型,则需重载转型操作符。转型操作符重载函数的声明语法如下:
        operator 类型名 ();
    转型操作符重载函数有几点需要注意的:

    • 函数没有返回类型;
    • 虽然没有返回类型但是函数体中必须有return语句,其返回类型是由类型名来指定的;
    • 转型操作符重载函数只能以类的成员函数的形式进行重载,而不能以友元函数或顶层函数的形式进行重载。


    例1:

    #include <iostream>
    using namespace std;
    
    class clock
    {
    public:
        clock(){hour = min = ap = 0;}
        clock(int h, int m, int ap);
        operator int();
    private:
        int hour;
        int min;
        int ap;  // 0表示am, 1表示pm
    };
    
    clock::clock(int h, int m, int ap)
    {
        hour = h;
        min = m;
        this->ap = ap;
    }
    
    //转型操作符重载函数
    clock::operator int()
    {
        int time = hour;
        if(time == 12)
            time = 0;
        if(ap == 1)
            time += 12;
        time *= 100;
        time += min;
        return time;
    }
    
    int main()
    {
        clock c(5,7,1);
        int time = c;
        cout<<time<<endl;
        return 0;
    }

    在本例中我们重载了一个时钟类clock,该类中我们声明了一个转型操作符重载函数,该函数可以将类类型的时间转换为一个整形,转换后的整数是军事时间。在主函数中我们定义了一个clock类的对象c,之后将其赋给一个整形变量time,因为我们定义了转型操作符重载函数,因此这一句话并没有出现语法错误。

    转型操作符重载可以给程序带来一定的方便,但是建议还是谨慎使用。因为系统通常在需要的时候就会调用转型操作符重载函数,该函数的调用时隐式的,有时候会给程序带来一些意想不到的问题。

  • 相关阅读:
    web自动化--如何在不同页面间游刃有余
    web自动化-窗口句柄及位置变化
    [bug] 验证selenium的显式和隐式等待而发现的一个低级错误
    Web自动化
    Appium 实战练习一
    Appium1.9 之 Chromedriver安装方式
    Appium1.9.1 之 Desired Capabilities 释疑
    [BUG]Appium1.9.1 这个问题竟然花了我5分钟进行定位
    Appium1.9.1 部署及结果检验
    selenium 初探
  • 原文地址:https://www.cnblogs.com/yongpan/p/7899545.html
Copyright © 2020-2023  润新知