参考:http://www.weixueyuan.net/view/6386.html

注意:

  自增“++”与自减“--”都是一元操作符,其前置和后置两种形式都可以被重载。  

  前置  stopwatch operator++();        // ++ i 

  后置 stopwatch operator++(int);     // i ++  

自增“++”与自减“--”都是一元操作符,其前置和后置两种形式都可以被重载。有了前面介绍操作符重载的基础,我们就直接以示例的形式介绍自增与自减操作符的前置与后置重载方法。

例1:

#include <iostream>
#include <iomanip>
using namespace std; class stopwatch
{
public:
stopwatch(){ min = ; sec = ;}
void setzero() { min = ; sec = ; }
stopwatch run(); // 运行
stopwatch operator++(); // ++ i
stopwatch operator++(int); // i ++
friend ostream & operator<<( ostream &, const stopwatch &);
private:
int min; //分钟
int sec; //秒钟
}; stopwatch stopwatch::run()
{
++ sec;
if( sec == )
{
min ++;
sec = ;
}
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('')<< setw() << s.min
<< ":" <<setw() << 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 ;
}

在本例中我们定义了一个简单的秒表类,该类有两个私有成员变量min和sec,分别代表分钟和秒钟。在类中声明的成员函数setzero是用于秒表清零,run函数是用于描述秒针向前进一秒的动作,之后是三个操作符重载函数,前两个分别是重载自增操作符,最后一个是重载输出操作符。我们来仔细看一下各个函数的具体实现。先来看一下run函数的实现,run函数一开始让秒针自增,如果此时自增结果等于60了,则应该进位,分钟加1,秒针置零。再来看一下operator++()函数的实现,该函数时实现自增的前置形式,因此直接返回run()函数运行结果即可。对于operator++ ( int n )函数,这是实现自增的后置形式,自增的后置形式返回值是对象本身,但是之后再次使用该对象时,该对象自增了,因此在该函数的函数体中,先将对象保存,然后调用一次run函数,之后再将先前保存的对象返回,在这个函数中参数n是没有任何意义的,它的存在只是为了区分是前置还是后置形式。最后我们还重载了输出操作符,以便于我们打印计时结果,在函数体中我们使用了输出控制函数,这些函数将在输入输出流那一章会有介绍。

这个程序运行结果如下:
    s1 00:00
    s2 00:01
    s1 00:01
    s2 00:01

对照主函数来看程序运行结果,主函数一开始我们定义了两个对象s1和s2,第一次操作是s1 = s2 ++; 采用的是后置形式,这可以理解为s1 = s2 并且s2自增,输出结果是s1是处于置零状态,s2自增了一秒钟。之后两个对象都清零,清零后s1 = ++ s2; 这个可以理解为s2自增并将自增结果赋给s1,如此一来两个对象都自增一秒钟。

自减操作符的重载跟自增操作符类似,这里就不再赘述了。

5.8 C++重载自增与自减操作符的更多相关文章

  1. Java自增和自减操作符——++/--的那些事

    1. 概述 自增操作符(++)和自减操作符(--)是对变量进行加1和减1的操作. 2.分类说明 ++和--是对变量进行自增1和自减1的简写操作符.许多编程任务中经常需要对变量加1或者减1,所以采用这两 ...

  2. c++中自增(++)和自减(--)操作符

    自增(++)和自减(--)操作符为对象加1 或减1 操作提供了方便简短的实现方式.它们有前置和后置两种使用形式.到目前为止,我们已经使用过前自增操作,该操作使其操作数加1,操作结果是修改后的值.同理, ...

  3. C++ Primer 学习笔记_61_重载操作符与转换 --自增/自减操作符

    重载操作符与转换 --自增/自减操作符 引言: 自增,自减操作符常常由诸如迭代器这种类实现,这种类提供相似于指针的行为来訪问序列中的元素.比如,能够定义一个类,该类指向一个数组并为该数组中的元素提供訪 ...

  4. C++ 自增、自减运算符的重载和性能分析

    01 ++.--运算符重载函数的格式 自增运算符和自减运算符是有前置和后置之分的,如: a++ // 后置自增运算符 ++a // 前置自增运算符 b-- // 后置自减运算符 --b // 前置自减 ...

  5. cc22a_demo_c++重载自增自减操作符-代码示范

    cc22a_demo_c++重载自增自减操作符-代码示范 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespa ...

  6. javascript中的自增与自减

    一直都对自增与自减的执行顺序有点糊涂,今天查了资料,来总结一下 a++(a--),就是指当时计算a,当下一次使用这个变量的时候才执行++或者-- ++a(--a),就是指当时就计算++或者-- 例1: ...

  7. 自增或自减例子:i++和++i的相同点和不同点

    /* Name:++i和i++的区别 Copyright: By.不懂网络 Author: Yangbin Date:2014年2月15日 02:40:27 Description:熟悉前自增或自减的 ...

  8. C++自增和自减运算符(--和++)

    在C和C++中,常在表达式中使用自增(++)和自减(--)运算符,他们的作用是使变量的值增1或减1,如:++i(在使用i之前,先使i的值加1,如果i的原值为3,则执行j=++i后,j的值为4)--i ...

  9. C语言之自增和自减运算符

    一 自增和自减 自增(++):就是给自己的值再加1 自减(--):就是给自己的值减1 tips: ++(--)可以放在前面,也可以放在后面,效果都是一样,都是会给自身+1(-1) 前缀++(--):会 ...

随机推荐

  1. Getting Started with Processing 第五章的easing问题(2)

    程序代码清单如下: float x; float y; float px; float py; float easing = 0.05; void setup(){ size(480,120); st ...

  2. HTML第十章总结

    前言 这一章节讲了以下内容: 两个新的 HTML elelments:它们是 <div>和 <span>,使用这两个 element 可以使得 HTML 有更加 serious ...

  3. 51Nod-1441 士兵的数字游戏

    题目要求是求出a!/b!(a>=b)的结果,让其不断做除法,最多能做多少次.这个问题首先可以转化为求a!中所有质因子个数-b!中所有质因子个数.以前做过一道快速求某个阶乘对一个素数的因子个数的题 ...

  4. 并查集-解决区间和纠错问题 hdu-3038

    题目:多次给出信息,告诉你[a,b]区间的和,求多少个错误信息(错误信息不考虑). 乍一看有点像线段树,但想想就发现这个并不能用线段树方便地解决.后来经提醒是并查集的一种经典题型. 把区间抽象为并查集 ...

  5. kohana导入和导出

    一.导入 ini_set('memory_limit', '512M'); require_once(Kohana::find_file('vendor', 'PHPExcel/PHPExcel/IO ...

  6. sscanf(),sscanf_s()的相关用法

    #include<stdio.h> 定义函数 int sscanf (const char *str,const char * format,........); 函数说明  sscanf ...

  7. hdu-6397-容斥

    Character Encoding Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Oth ...

  8. MySQL安装脚本最佳实践

    MySQL安装脚本最佳实践 2018年9月19日 17:01 #!/bin/bash   export host_ip=192.168.7.206   echo '#1.取master主机ip的后三位 ...

  9. ES6 开发常用新特性以及简述ES7

    一.关于变量 ES6新增:块级作用域变量 1.let定义块级作用域变量 没有变量的提升,必须先声明后使用 let声明的变量,不能与前面的let,var,conset声明的变量重名 { { consol ...

  10. C++三大特性 封装 继承 多态

    C++ 三大特性 封装,继承,多态 封装 定义:封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对 ...