• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++学习30重载++和--(自增自减运算符)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

自增“++”和自减“--”都是一元运算符,它的前置形式和后置形式都可以被重载。请看下面的例子:

#include <iostream>
#include <iomanip>
using namespace std;
class stopwatch{  //秒表
private:
    int min;  //分钟
    int sec;  //秒钟
public:
    stopwatch(): min(0), sec(0){ }
    void setzero(){ min = 0; sec = 0; }
    stopwatch run();  // 运行
    stopwatch operator++();  //++i,前置形式
    stopwatch operator++(int);  //i++,后置形式
    friend ostream & operator<<( ostream &, const stopwatch &);
};
stopwatch stopwatch::run(){
    ++ sec;
    if( sec == 60 ){
        min ++;
        sec = 0;
    }
    return *this;
}
stopwatch stopwatch::operator++(){
    return run();
}
stopwatch stopwatch::operator++(int n){
    stopwatch s = *this;
    run();
    return s;
}
ostream & operator<<( ostream & out, const stopwatch & s){
    out<<setfill('0')<<setw(2)<<s.min<<":"<<setw(2)<<s.sec;
    return out;
}
int main(){
    stopwatch s1, s2;
    s1 = s2 ++;
    cout << "s1: "<< s1 <<endl;
    cout << "s2: "<< s2 <<endl;
    s1.setzero();
    s2.setzero();
    s1 = ++ s2;
    cout << "s1: "<< s1 <<endl;
    cout << "s2: "<< s2 <<endl;
    return 0;
}

上面的代码定义了一个简单的秒表类,min 表示分钟,sec 表示秒钟,setzero() 函数用于秒表清零,run() 函数是用来描述秒针前进一秒的动作,接下来是三个运算符重载函数。

先来看一下 run() 函数的实现,run() 函数一开始让秒针自增,如果此时自增结果等于60了,则应该进位,分钟加1,秒针置零。

operator++() 函数实现自增的前置形式,直接返回 run() 函数运行结果即可。

operator++ (int n) 函数实现自增的后置形式,返回值是对象本身,但是之后再次使用该对象时,对象自增了,所以在该函数的函数体中,先将对象保存,然后调用一次 run() 函数,之后再将先前保存的对象返回。在这个函数中参数n是没有任何意义的,它的存在只是为了区分是前置形式还是后置形式。

自减运算符的重载与上面类似,这里不再赘述。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
使用MSVS的命令来编译C++程序发布时间:2022-07-14
下一篇:
C语言从文件中读取数字发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap