程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++: 重載前綴運算符與重載後綴運算符(以++為例)

C++: 重載前綴運算符與重載後綴運算符(以++為例)

編輯:C++入門知識

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

以上內容皆為本人觀點,歡迎大家提出批評和指導,我們一起探討!


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved