C++-自己加算/自己減算演算子のリロード

1927 ワード

  • +/--演算子には、前置/後置の
  • があります.
  • 前置演算子を1元演算子として再ロード
  • メンバー関数としてリロード:T operator++();T operator--();
  • はグローバル関数としてリロードされます:T operator+(T);T operator--(T);

  • ++obj,obj,operator++()、operator++(obj)は、上述の関数
  • を呼び出す.
  • 後置演算子を二元演算子として再ロード
  • は1つのパラメータを多く書いて、ただこのリロード演算子が後置的であることを示すだけで、他の意味はありません
  • メンバー関数としてリロード:T operator+(int);T operator--(int);
  • はグローバル関数としてリロードされる:T operator++(T,int);T operator--(T,int);

  • obj+,obj,operator++(0)、operator++(obj,0)は、上関数
  • を呼び出す.
    //
    //  main.cpp
    //            
    //
    //  Created by MENGCHEN on 16/1/20.
    //  Copyright © 2016  MENGCHEN. All rights reserved.
    //
    #include 
    using namespace std;
    class CDemo {
        int n;
    public:
        CDemo(int i):n(i){}
        CDemo operator++();//  
        CDemo operator++(int);//  ,     int   ,       
        operator int(){ return n;}
        friend CDemo operator--(CDemo&);//  
        friend CDemo operator--(CDemo&,int);//  ,     int   ,        。
    };
    CDemo CDemo:: operator++(){
        n++;
        return *this;
    }
    CDemo CDemo:: operator ++(int i){
        CDemo tmp(*this);
        n++;
        return tmp;
    }
    CDemo operator--(CDemo& a){
        a.n--;
        return a;
    }
    CDemo operator--(CDemo& a,int){
        a.n--;
        return a;   
    }
    int main(int argc, const char * argv[]) {
        // insert code here...
        std::cout << "Hello, World!
    "; return 0; }
  • intは、強制変換演算子としてリロードされ、Demo s;(int)s;
  • 型強制変換演算子のリロード時、
  • 戻り値タイプ
  • は書き込めません.
  • 実際には戻り値タイプ--タイプ強制変換演算子が表すタイプ

  • 演算子のリロードに関する注意事項
  • C++は、新しい演算子
  • を定義できません.
  • リロード後の演算子の意味は、日常的な習慣に合致する必要があります.
  • complex_a + complex_b;
  • word_a > word_b
  • date_b = date_a+n;

  • 演算子リロード演算子の優先度を変更しない
  • 次演算子は再ロードできません:「.」".*","::","?:,sizeof
  • リロード演算子(),[],->または代入演算子=の場合、リロード関数はクラスのメンバー関数
  • として宣言する必要があります.