zoukankan      html  css  js  c++  java
  • 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,因为我们定义了转型操作符重载函数,因此这一句话并没有出现语法错误。

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

  • 相关阅读:
    Hdu1711 Number Sequence--Kmp模板题
    Trie入门--Poj3630 Phone List,查单词,HDU1251 统计前缀,PKU2503 Babelfish
    高次幂的组合数表示形式
    BZOJ1697 [Usaco2007 Feb] Cow Sorting牛排序
    1025 [SCOI2009]游戏(置换群,DP)
    Poj1721 Cards
    [Poi2003]Shuffle
    poj 3128 Leonardo's Notebook(置换的幂)
    POJ3734 Block母函数入门
    重心拉格朗日插值法
  • 原文地址:https://www.cnblogs.com/yongpan/p/7899545.html
Copyright © 2011-2022 走看看