標簽: 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
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
以上內容皆為本人觀點,歡迎大家提出批評和指導,我們一起探討!