C++ 重载自增和自减运算符
生活随笔
收集整理的這篇文章主要介紹了
C++ 重载自增和自减运算符
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
自增++和自減–都是一元運算符,它的前置形式和后置形式都可以被重載。請看下面的例子:
#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; }運行結(jié)果:
s1: 00:00 s2: 00:01 s1: 00:01 s2: 00:01上面的代碼定義了一個簡單的秒表類,m_min 表示分鐘,m_sec 表示秒鐘,setzero() 函數(shù)用于秒表清零,run() 函數(shù)是用來描述秒針前進一秒的動作,接下來是三個運算符重載函數(shù)。
看一下 run() 函數(shù)的實現(xiàn),run() 函數(shù)一開始讓秒針自增,如果此時自增結(jié)果等于60了,則應該進位,分鐘加1,秒針置零。
operator++() 函數(shù)實現(xiàn)自增的前置形式,直接返回 run() 函數(shù)運行結(jié)果即可。
operator++ (int n) 函數(shù)實現(xiàn)自增的后置形式,返回值是對象本身,但是之后再次使用該對象時,對象自增了,所以在該函數(shù)的函數(shù)體中,先將對象保存,然后調(diào)用一次 run() 函數(shù),之后再將先前保存的對象返回。在這個函數(shù)中參數(shù)n是沒有任何意義的,它的存在只是為了區(qū)分是前置形式還是后置形式。
總結(jié)
以上是生活随笔為你收集整理的C++ 重载自增和自减运算符的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 获取向量中的最大值
- 下一篇: Java Integer类详解