C++重载运算符(2)

运算符成员函数设计

(1)前置运算符op

如果要重载op为类成员函数,使之能够实现表达式op oprd,其中oprd为类A的对象,则op应被重载为A类的成员函数,无形参。经重载后,表达式op oprd相当于oprd.operator op()。

增1减1运算符是一元运算符,它们又有前置和后置两种。为了区分这两种运算,将后置运算视为二元运算符。表达式:
obj++或obj–,被看作obj++0或obj–0

(2)后置一元运算符++、–
如果要重载++、–为类成员函数,使之能够实现表达式oprd++、oprd–,其中oprd为A类对象,则++或–应被重载为A类的成员函数,且具有一个int类型的形参。经重载后,表达式oprd++相当于 oprd.operator++(0)。
例 运算符前置++和后置++重载为时钟类的成员函数。
前置一元运算符,重载函数没有形参。
后置一元运算符,重载函数需要一个整形的形参。
操作数是时钟类对象。
实现时间增加一秒钟。

#include <iostream>
using namespace std;
class Clock{
    public:
    Clock(int Hour=0,int Minute=0,int Second=0){
        this->Hour=Hour;
        this->Minute=Minute;
        this->Second=Second;}
    void showtime(){
        cout<<Hour<<":"<<Minute<<":"<<Second<<endl;}
    Clock & operator ++ ();
    Clock operator ++(int);
    private:
    int Hour,Minute,Second;
    };
Clock & Clock::operator ++ (){
    Second++;
    if(Second>=60){
        Second=Second-60;
        Minute++;
        if(Minute>=60){
            Minute=Minute-60;
            Hour++;
            Hour%=24;}
            }
        return *this;
    };
Clock Clock::operator ++(int){
    Clock old=*this;
    ++(*this);![在这里插入图片描述](https://img-blog.csdnimg.cn/20200517151413823.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1ODM2Nzkw,size_16,color_FFFFFF,t_70#pic_center)
    return old;
    };
int main()
{
    Clock myClock(23,59,59);
    cout<<"First time output:";
    myClock.showtime();
    cout<<"Show myClock++:";
    (myClock++).showtime();
    cout<<"Show ++myCLock:";
    (++myClock).showtime();
    return 0;
}

在这里插入图片描述

在C++原生语言中,前置运算符返回的是对象的引用,后置运算符不返回引用,为了维持这种一致性,在重载前置运算符时函数返回值最好也是引用因此,前置可以作为左值,而后置不可++a = 1合法, a++ = 1不合法。由于前置返回的是引用,所以前置运算符较后置运算符快。(没有一些中间对象的构造和析构的过程),所以若前置后置对程序正确性没有影响的情况下应该使用前置运算符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值