美文网首页
运算符重载

运算符重载

作者: 带带吴腾跃 | 来源:发表于2019-11-06 18:26 被阅读0次

    例如“+”法运算符并不能用于两个类或者两个数组直接相加,但有个方法可以用“+”操作符使其直接相加,那就是重载,这也是体现C++多态的一一种形式。

    重载的声明:

    返回值类型 operator 要重载但运算符 (传入的参数)
    

    其实仔细看不难发现,重载的声明跟函数声明很像,只需要把函数名字改成 operator 要重载的运算符 即可。

    我们通过一个使用类的例子来应用运算符重载。
    声明一个时间类,包含小时和分,类成员函数详细内容不再写出。

    class Time
    {
    private:
        int hours;
        int minutes;
    public:
        Time();
        Time(int h,int m = 0);
        void AddHr(int h);
        void AddMin(int m);
        void Reset(int h = 0,int m = 0);
        Time Sum(const Time & t)const;
        void show()const;
    }
    

    此时我们可以调用类内函数Sum来求两个Time类型的和。

    Time a,b;
    a.Sum(b)const;
    

    现在我们把类内函数Sum改成“+”法运算符的重载,实现相同的功能。
    只需要将Time Sum(const Time & t)const;次函数声明的函数名改成operator+,如下:

    Time operator+(const Time & t)const;
    

    此时,我们就可以对a,b两个Time类型的数据直接相加。(函数内容就不再赘述)

    重载的限制

    • 1.所重载的运算符的运算中必须有一个数据类型是用户定义的,例如两个double类型做减法运算,然后你把“-”法运算符重载成加法的功能,那计算机到底该如何运算?

    • 2.不能违反运算符原来的句法规则,例如不能用%去重载成一个声明变量的运算符。

    int a;
    % b; //invalid
    
    • 3.你不能去创建一个新的运算符,例如**。
    • 4.有一些运算符不能重载。
    • 5.下面几个运算符只能通过成员函数进行重载。
      赋值运算符 =
      函数调用运算符 ()
      下标运算符 []
      通过指针访问类成员的运算符 ->

    相关文章

      网友评论

          本文标题:运算符重载

          本文链接:https://www.haomeiwen.com/subject/arqpbctx.html