欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-03 20:20:54
C++: 重载前缀运算符与重载后缀运算符(以++为例) 标签: C++ 重载运算符 前缀运算符 后缀运算符 by 小威威 在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

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