C++前置自增运算符和后置自增运算符的重载

本文是关于重载单目运算符的实战讲解,用两个例子进行说明。理论不多,重在理解前置++和后置++的区别。在看本文之前,您需要了解运算符的重载的基本概念。如果不懂,也没关系,请进下面的传送门。

浅显易懂的C++运算符重载

理论:

  1. 前置单目运算符,重载函数没有形参。
  2. 后置单目运算符,重载函数需要一个int形参。只起到区别前置运算符的的作用。

人狠话不多,来,小二,上茶~~~

例如下面的例子:
  我们创建一个时间的类,使其能够实现时间的自增操作,包括前置自增和后置自增。

在类中我们声明了两个个++运算符的重载类型的函数:

  • Clock& operator++();,它是没有形参的,并且它的返回值类型是Clock类对象的引用,是一个左值。
  1. 在函数的实现中。我们先让当前对象的second值加一,然后对hour和minute值进行进位操作。
  2. 最后,我们返回指向当前对象的引用。可以看到它的值就是进行加一之后的值。
Clock& Clock::operator++()//返回的是加一操作之后的值的引用,是一个左值。
{
   
        this->second++;
        if (second >= 60)
        {
   
               this->second = this->second - 60;
               this->minute++;
               if (minute >= 60)
               {
   
                       this->minute = this->minute - 60;
                       this->hour = (this->hour + 1) % 24;
               }
        }
        return *this;//返回加一之后的值。
}
  • Clock operator++(int);,它有一个int型的形参,该形参没有什么之实际作用,只是用来区别前置自增运算符的重载函数,并且它的返回值是一个Clock类对象。
  1. 在函数实现中,我们先将当前对象拷贝一份,然后再对当前对象进行加一操作。
  2. 我们这里调用的是上面的前置加一操作,而没有将上面的代码再拷贝一份,那样做是愚蠢的。
  3. 我们这里使用的是24小时制来表示时间,如果我们想用12小时制来表示,我们这种写法,只需在一个函数中修改即可。而不用在两处都修改。保证了代码的可维护性。
Clock Clock::operator++(int)//返回加一操作之前的值的副本,是一个右值
{
   
        Clock old = *this;
        ++(*this);//调用前置“++”运算符
        return old;//返回++之前的值。
}
/*

操作数是自定义类
//*/
#include<iostream>
using namespace std;
class Clock
{
   
public:
        Clock(int h=0,int m=0,int s=0);
        void showTime() const;
        Clock& operator++();//前置++
        Clock operator++(int);//后置++,只是和前置区分开,没有实际作用
        ~Clock()
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值