运算符重载 c语言中文网,C++单目运算符重载

本文介绍了C++中如何重载单目运算符,特别是自增运算符"++"。通过一个Time类的例子,展示了前置自增和后置自增两种形式的重载方法。前置自增在操作后立即返回增加后的对象,而后置自增则返回操作前的对象。在重载后置自增运算符时,增加了一个int型参数以区别于前置自增,但该参数实际在函数中并未使用,仅作为区分标志。
摘要由CSDN通过智能技术生成

单目运算符只有一个操作数,如!a,-b,&c,*p,还有最常用的++i和--i等。重载单目运算符的方法与重载双目运算符的方法是类似的。但由于单目运算符只有一个操作数,因此运算符重载函数只有一个参数,如果运算符重载函数作为成员函数,则还可省略此参数。

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

[例10.5] 有一个Time类,包含数据成员minute(分)和sec(秒),模拟秒表,每次走一秒,满60秒进一分钟,此时秒又从0开始算。要求输出分和秒的值。

#include

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<

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型形参,就是后置自增(自减)运算符函数。

[例10.6] 在例10.5程序的基础上增加对后置自增运算符的重载。修改后的程序如下:

#include

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<

private:

int minute;

int sec;

};

Time Time::operator++( )//定义前置自增运算符“++”重载函数

{

if(++sec>=60)

{

sec-=60;

++minute;

}

return *this;//返回自加后的当前对象

}

Time Time::operator++(int)//定义后置自增运算符“++”重载函数

{

Time temp(*this);

sec++;

if(sec>=60)

{

sec-=60;

++minute;

}

return temp; //返回的是自加前的对象

}

int main( )

{

Time time1(34,59),time2;

cout<

time1.display( );

++time1;

cout<

time1.display( );

time2=time1++; //将自加前的对象的值赋给time2

cout<

time1.display( );

cout<

time2.display( ); //输出time2对象的值

}

请注意前置自增运算符“++”和后置自增运算符“++”二者作用的区别。前者是先自加,返回的是修改后的对象本身。后者返回的是自加前的对象,然后对象自加。请仔细分析后置自增运算符重载函数。

运行结果如下:

time1 : 34:59(time1原值)

++time1: 35:0 (执行++time1后time1的值)

time1++: 35:1 (再执行time1++后time1的值)

time2 : 35:0 (time2保存的是执行time1++前time1的值)

可以看到,重载后置自增运算符时,多了一个int型的参数,增加这个参数只是为了与前置自增运算符重载函数有所区别,此外没有任何作用。编译系统在遇到重载后置自增运算符时,会自动调用此函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值