程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++基礎知識 >> C++重載++和--(自增自減運算符)

C++重載++和--(自增自減運算符)

編輯:C++基礎知識
自增++和自減--都是一元運算符,它的前置形式和後置形式都可以被重載。請看下面的例子:
#include <iostream>
#include <iomanip>
using namespace std;

//秒表類
class stopwatch{
public:
    stopwatch(): m_min(0), m_sec(0){ }
public:
    void setzero(){ m_min = 0; m_sec = 0; }
    stopwatch run();  // 運行
    stopwatch operator++();  //++i,前置形式
    stopwatch operator++(int);  //i++,後置形式
    friend ostream & operator<<( ostream &, const stopwatch &);
private:
    int m_min;  //分鐘
    int m_sec;  //秒鐘
};

stopwatch stopwatch::run(){
    ++m_sec;
    if(m_sec == 60){
        m_min++;
        m_sec = 0;
    }
    return *this;
}

stopwatch stopwatch::operator++(){
    return run();
}

stopwatch stopwatch::operator++(int n){
    stopwatch s = *this;
    run();
    return s;
}

ostream &operator<<( ostream & out, const stopwatch & s){
    out<<setfill('0')<<setw(2)<<s.m_min<<":"<<setw(2)<<s.m_sec;
    return out;
}

int main(){
    stopwatch s1, s2;

    s1 = s2++;
    cout << "s1: "<< s1 <<endl;
    cout << "s2: "<< s2 <<endl;
    s1.setzero();
    s2.setzero();

    s1 = ++s2;
    cout << "s1: "<< s1 <<endl;
    cout << "s2: "<< s2 <<endl;
    return 0;
}
運行結果:
s1: 00:00
s2: 00:01
s1: 00:01
s2: 00:01

上面的代碼定義了一個簡單的秒表類,m_min 表示分鐘,m_sec 表示秒鐘,setzero() 函數用於秒表清零,run() 函數是用來描述秒針前進一秒的動作,接下來是三個運算符重載函數。

先來看一下 run() 函數的實現,run() 函數一開始讓秒針自增,如果此時自增結果等於60了,則應該進位,分鐘加1,秒針置零。

operator++() 函數實現自增的前置形式,直接返回 run() 函數運行結果即可。

operator++ (int n) 函數實現自增的後置形式,返回值是對象本身,但是之後再次使用該對象時,對象自增了,所以在該函數的函數體中,先將對象保存,然後調用一次 run() 函數,之後再將先前保存的對象返回。在這個函數中參數n是沒有任何意義的,它的存在只是為了區分是前置形式還是後置形式。

自減運算符的重載與上面類似,這裡不再贅述。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved