详解详解C++编程中的单目运算符重载与双目运算符重载编程中的单目运算符重载与双目运算符重载
C++单目运算符重载单目运算符重载
单目运算符只有一个操作数,如!a,-b,&c,*p,还有最常用的++i和–i等。重载单目运算符的方法与重载双目运算符的方法
是类似的。但由于单目运算符只有一个操作数,因此运算符重载函数只有一个参数,如果运算符重载函数作为成员函数,则还
可省略此参数。
下面以自增运算符”++“为例,介绍单目运算符的重载。
[例] 有一个Time类,包含数据成员minute(分)和sec(秒),模拟秒表,每次走一秒,满60秒进一分钟,此时秒又从0开始算。要
求输出分和秒的值。
#include <iostream>
using namespace std;
class Time
{
public:
Time( ){minute=0;sec=0;} //默认构造函数
Time(int m,int s):minute(m),sec(s){ } //构造函数重载
Time operator++( ); //声明运算符重载函数
void display( ){cout<<minute<<":"<<sec<<endl;} //定义输出时间函数
private:
int minute;
int sec;
};
Time Time::operator++( ) //定义运算符重载函数
{
if(++sec>=60)
{
sec-=60; //满60秒进1分钟
++minute;
}
return *this; //返回当前对象值
}
int main( )
{
Time time1(34,0);
for (int i=0;i<61;i++)
{
++time1;
time1.display( );
}
return 0;
}
运行情况如下:
34:1
34:2
┆
34:59
35:0
35:1 (共输出61行)
可以看到:在程序中对运算符“++”进行了重载,使它能用于Time类对象。“++”和“–”运算符有两种使用方式,前置自增运算符
和后置自增运算符,它们的作用是不一样的,在重载时怎样区别这二者呢?
针对“++”和“–”这一特点,C++约定,在自增(自减)运算符重载函数中,增加一个int型形参,就是后置自增(自减)运算符函数。
[例] 在上面例子程序的基础上增加对后置自增运算符的重载。修改后的程序如下:
#include <iostream>
using namespace std;
class Time
{
public:
Time( ){minute=0;sec=0;}
Time(int m,int s):minute(m),sec(s){}
Time operator++( );//声明前置自增运算符“++”重载函数
Time operator++(int);//声明后置自增运算符“++”重载函数
void display( ){cout<<minute<<":"<<sec<<endl;}
private:
int minute;
int sec;