C++: 重载前缀运算符与重载后缀运算符(以++为例)

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 
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

以上内容皆为本人观点,欢迎大家提出批评和指导,我们一起探讨!


你可能感兴趣的:(C++)