C++重载单目运算符

重载单目运算符

单目运算符只有一个操作数,如 !a, -b, &c, *p,还有常用的 ++i 和 --i 等。重载单目运算符的方法和重载双目运算符的方式类似。但是,由于单目运算符只有一个操作数,因此,运算符重载函数只有一个参数,如果运算符重载函数作为类成员函数,则还可以省略此参数。根据单目运算符的特点,它只有一个操作数,所以,“肯定”能够把这个运算符重载函数定义为类的成员函数。

下面以自增运算符“++”为例子,介绍单目运算符的重载。

例如,我们要写一个闹钟程序,闹钟模拟秒表,每次走1秒钟。那么,满60秒进一分钟,此时秒又从0开始算。程序测试代码如下:

 程序运行的结果是:

 

可以看到,定义一个秒钟,初始时间是0分58秒。执行了3次递增操作。每次是秒数增加1,然后,满60的时候,分数增加1。所以,可以看到第二次递增的时候,秒数增加到60,然后,秒数归零,分数增加1。

可以看到:在程序中对运算符“++”进行了重载,使它能用于my_string类对象。但是,对应“++”运算符,有如下两种方式操作:

int i;

i++;

++i;

那么,“前置”自增运算符和“后置”自增运算符,它们的作用是不一样的,在重载时怎么样区别这二者呢?

针对“++”和“--”这一特点,C++约定:如果在自增(自减)运算符重载函数中,增加一个 int 类型的参数,就是“后置”自增(自减)的运算符函数。

那么,修改上面的例子,增加对后置自增运算符的重载。

 

 程序运行的结果如下:

 

可以看到,在执行 t1++; 的时候,调用的是 operator ++(int); 这个带了 int 形参的重载运算符函数。

可以看到:重载后置自增运算符时,多了一个 int 型的参数,增加这个参数只是为了与前置自增运算符重载函数有所区别。此外,没有任何作用,在定义函数的时候,不必使用此参数,因此,可以省略写参数名。只需在括号中写 int 即可。编译系统会在遇到后置自增运算符时,自动调用此函数。


韦凯峰 Linux C/C++ 程序设计教程,Linux 系统编程,Openwrt 系统开发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韦凯峰Linux编程学堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值