C++: 重载前缀运算符与重载后缀运算符(以++为例)
标签: C++ 重载运算符 前缀运算符 后缀运算符
by 小威威
在C++中如何区分重载前缀运算符与重载后缀运算符呢?不难发现,重载后缀运算符带有形参int而重载前缀运算符没有。这个形参的作用只是为了区分二者,并没有实际的意义。
我们知道,a++与++a是有区别的,如c = a++ 与 c = ++a,两个c的值是不同的。因为前者是先将a赋给变量c,然后再自增,而后者是a先自增,然后再将自增后的结果赋给变量c。
因此,因为这点微妙的区别,重载这两个运算符的代码便有有一定的区别,现代码如下:
//
// main.cpp
// time
//
// Created by apple on 16/2/21.
// Copyright (c) 2016年 apple. All rights reserved.
//
# include <iostream>
using namespace std;
class Time {
private :
int minutes;
int hours;
public :
Time() {
minutes = 0;
hours = 0;
}
Time(int h, int m) {
minutes = m;
hours = h;
}
void display() {
cout << " H " << hours << " M " << minutes << endl;
}
Time operator ++ () {
++minutes;
if (minutes >= 60) {
minutes -= 60;
hours += 1;
}
return Time(hours, minutes); \\ 返回自增后的值
};
Time operator ++ (int) {
Time T(hours, minutes); \\ 保存原来的值
minutes++;
if (minutes >= 60) {
minutes -= 60;
hours += 1;
}
return T; \\ 返回自增前的值
};
};
int main(void) {
Time T1(11, 59), T2(10, 40), T3, T4;
++T1;
T1.display();
++T1;
T1.display();
++T2;
T2.display();
T2++;
T2.display();
T3 = T2++;
T3.display();
T4 = ++T1;
T4.display();
return 0;
}
输出结果:
H 12 M 0
H 12 M 1
H 10 M 41
H 10 M 42
H 10 M 42
H 12 M 2
以上内容皆为本人观点,欢迎大家提出批评和指导,我们一起探讨!