C++重载单目运算符
Posted Linux编程学堂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 系统开发
以上是关于C++重载单目运算符的主要内容,如果未能解决你的问题,请参考以下文章