3-3-5. 加算・減算演算子のオーバーロード

公開日: 14:59 3. オブジェクト指向編/3-3. オーバーロード/3-3-5. 加算・減算演算子のオーバーロード


加算(++)・減算(--)演算子はC++で利用可能な重要な単項演算子です。

次の例はどのようにして加算演算子が接尾辞と同じように接頭辞としてオーバーロード されるかを示します。同じ方法で減算演算子もオーバーロードすることができます。
#include <iostream>
using namespace std;
 
class Time
{
   private:
      int hours;             // 0 から 23
      int minutes;           // 0 から 59
   public:
      // 必要なコンストラクタ
      Time(){
         hours = 0;
         minutes = 0;
      }
      Time(int h, int m){
         hours = h;
         minutes = m;
      }
      // 時間出力関数
      void displayTime()
      {
         cout << "H: " << hours << " M:" << minutes <<endl;
      }
      // 接頭辞としての++のオーバーロード
      Time operator++ ()  
      {
         ++minutes;          // このオブジェクトを加算
         if(minutes >= 60)  
         {
            ++hours;
            minutes -= 60;
         }
         return Time(hours, minutes);
      }
      // 接尾辞としての++のオーバーロード
      Time operator++( int )         
      {
         // 元の値を保存
         Time T(hours, minutes);
         // オブジェクトを加算
         ++minutes;                    
         if(minutes >= 60)
         {
            ++hours;
            minutes -= 60;
         }
         // 元の値を返す
         return T; 
      }
};
int main()
{
   Time T1(11, 59), T2(10,40);
 
   ++T1;                    // T1を加算
   T1.displayTime();        // T1を出力
   ++T1;                    // 再度T1を加算
   T1.displayTime();        // T1を出力
 
   T2++;                    // 以下同様に
   T2.displayTime();        
   T2++;                    
   T2.displayTime();        
   return 0;
}
上のコードをコンパイルし実行すると、次のような結果が得られます。
H: 12 M:0
H: 12 M:1
H: 10 M:41
H: 10 M:42
  • ?±??G???g???[?d????u?b?N?}?[?N???A

0 件のコメント :

コメントを投稿