关于运算符重载

 

所谓运算符重载其实就是对于运算符针对不同操作对象而实现不同功能,其实质就是函数重载(函数重载前面有一篇介绍)。实现过程就是先把运算表达式转化为对运算符函数的调用,把运算对象转化为运算函数的实参,然后根据实参的类型确定需要调用的函数。另外,c++标准规定了一些不能重载的操作符,分别是:1.类属关系运算符“ . ”,2.成员指针运算符“ .    * ”,3.作用域分辨符“  ::  ”,4.三目运算符“  ?:  ”。


运算符重载形式有两种,要么重载为类的非静态成员函数,要么重载为非成员函数。

一般重载的语法格式为:

返回类型 operator 运算符(形参){函数体}


下面举个重载为类的非静态成员函数的例子:

首先建一个简单的时间类:

class Time
{
    private:
    int hour;
    int minute;
    int second;


    public:
    Time();
    Time(int _hour);
    Time(int _hour,int _minute,int _second);


    Time operator+(Time &t);//重载“+”


    Time operator++ (int);//重载后置“++”
    Time& operator++ ();//重载前置“++”
    void Print();


    void setHour(int h )
    {
        int hour=h;
    }
    void setMinute(int m)
    {
        minute=m;
    }
    void setSecond(int s)
    {
        second=s;
    }
    int getHour()
    {
        return hour;
    }
    int getMinute()
    {
        return minute;
    }
    int getSecond()
    {
        return second;
    }
};

先看一下主函数:

int main()
{
    int x,y,z,p;
    cin>>x>>y>>z>>p;
    Time t1(x,y,z),t2(p),t3;
    cout<<"t1+t2: ";
    t3=t1+t2;
    t3.Print();
    t2=++t3;
    t2.Print();
    t2=t3++;
    t2.Print();
    t3.Print();
    return 0;
}

主函数里要实现两个对象相加还有单个对象的前置++和后置++运算

看一下三个运算符号重载函数的实现;

Time Time::operator +(Time &t)
{
   return  Time(hour+=t.getHour(),minute+=t.getMinute(),second+=t.getSecond());
}

这里返回值是Time类的对象,至于形参表只有一个对象是因为重载为类的成员函数时,第一个操作数会被作为函数调用的目的对象,无需出现在参数表里,函数体中可以直接访问第一个操作数的成员,而如果重载为非成员函数时,则运算符的所有操作数都进行显示地参数传递。

下面是前置++和后置++的语法格式和本程序的相关实现:

//前置++
Time & Time::operator ++()
{
    second++;
    if(second>=60)
    {
        second-=60;
        minute+=1;
        if(minute>=60)
        {
            minute-=60;
            hour=(hour+1)%12;
        }
    }
    return *this;
}
//后置++
Time Time::operator ++(int)
{
    Time t = * this;
    ++(* this);
    return t;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值