单目运算符只有一个操作数,如-a,! b,&c,∗p,++i和--i等。我们知道对于自增运算符“++”分为前缀和后缀两种类型,它们的作用和规则是不一样的,应如何区分呢?
重载单目运算符的函数只有一个参数,载单目运算符与重载双目运算符的方法类似,不同之处在于单目运算符只有一个操作数,如果是以类成员函数的形式重载单目运算符时,则要省略此参数。本节以自增运算符“++”为例介绍单目运算符重载的方法。
前增和与后增运算的区别:
我们知道,自增运算符分为前缀自增和后缀自增,它们的作用是有区别的。使用前缀自增运算时,先对操作数进行增量修改,然后再返回修改后的操作数。使用后缀自增运算时,返回的是操作数被修改前的值,为此需要创建一个局部变量用以保存操作数的最初值,然后才能对操作数进行增量修改。后缀自增运算返回的是原操作数的值,而不是原操作数。
针对前缀自增和后缀自增的特点,C++约定:在重载增量运算符的函数中增加一个int型参数则表示后缀自增运算。
1.以类成员形式重载
以类成员形式重载自增运算符时,前缀自增的运算符重载函数不含任何参数,后缀自增的运算符重载函数含有一个int参数。(www.daowen.com)
【例6.4】有一个Clock类,包含数据成员hour(小时)、minute(分)和(second)秒,Clock类对象进行自增运算,表示时间增加1秒。
从例6.4可以看出,程序中对自增运算符“++”进行了重载,从程序的运行结果可以看到前缀自增运算符和后缀自增运算符的作用是不一样的。
2.以非成员形式重载
自增运算符也能以非成员形式重载,自增运算符的非成员形式重载函数要声明为类的友元函数。
【例6.5】以非成员形式重载自增运算符,重写例6.4。
通过比较例6.4与例6.5可知,以非成员函数重载自增运算符时,重载增量运算符函数的形参要带上运算符操作数。所定义的重载前缀自增和后缀自增运算符的重载函数是不同的。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。