程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 第14章 重載操作符與轉換(6)

第14章 重載操作符與轉換(6)

編輯:C++入門知識

14.7 自增操作符和自減操作符
1. 定義自增/自減操作符
C++語言不要求自增操作符或自減操作符一定作為類的成員,但是,因為這些操作符改變操作對象的狀態,所以更傾向於將它們作為成員。
2. 定義前自增/前自減操作符
為了與內置類型一致,前綴操作符應返回被增量或減量對象的引用。

class CheckedArr 

public: 
    CheckedArr(int *b, int *e):beg(b),end(e),cur(b){} 
    CheckedArr &operator++() 
    { 
        if(end!=cur) 
        { 
            ++cur; 
            return *this; 
        } 
        else 
            throw out_of_range("out of range"); 
    } 
    CheckedArr &operator--() 
    { 
        if(beg!=cur) 
        { 
            --cur; 
            return *this; 
        } 
        else 
            throw out_of_range("out of range"); 
    } 
private: 
    int *beg; 
    int *end; 
    int *cur; 
}; 
3. 區別操作符的前綴和後綴形式
後綴操作符函數接受一個額外的(即無用的)int型形參。這個形參不是後綴式操作符的正常工作所需要的,它的唯一目的是使後綴函數與前綴函數區別開來。
4.定義後綴式操作符
為了與內置操作符一致,後綴式操作符應返回舊值(即,尚未自增或自減的值),並且,應作為值返回,而不是返回引用。

CheckedArr operator++(int) 

    CheckedArr ret(*this); 
    ++(*this); 
    return ret; 

CheckedArr operator--(int) 

    CheckedArr ret(*this); 
    --(*this); 
    return ret; 

因為通過前綴版本實現這些操作符,不需要檢查curr是否在范圍之內,那個檢查以及必要的throw,在相應的前綴式操作符中完成。
因為不使用int形參,所以沒有對其命名。
5. 顯式調用前綴式操作符
可以顯式調用重載操作符而不是將它作為操作符用在表達式中。如果想要使用函數調用來調用後綴式操作符,必須給出一個整型實參值。
所傳遞的值通常被忽略,但該值是必要的,用於通知編譯器需要的是後綴式版本。
一般而言,最好前綴式和後綴式都定義。只定義前綴式或只定義後綴式的類,將會讓習慣於使用兩種形式的用戶感到奇怪。

摘自 xufei96的專欄

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