0

私は10個の整数の配列を持っており、kは配列をループする整数です。'k = k + 1'を実行すると、'k'に1が追加されます('k'が7の場合、8になります)。しかし、「k」が9まで到達した場合、「k + 1」を10と評価したくないので、1にします。

私はこのような関数を使用することを検討しました:

void add_one(int &k){
   if(k == 9){
      k = 1;
   }else{
      k = k+1;
   }
}

そして、「k」に1つ追加したいときはいつでも:

add_one(k);

それから私は演算子のオーバーロードについて知りましたが、それは非常に混乱していて、もっと良い方法があるに違いないと思いました。k=9でk+1を検出するたびに、10ではなく1を返す必要があることをc ++に伝えることができますか?

4

3 に答える 3

3

次のような式を使用できます。

k = k % 9 + 1;
于 2012-10-20T06:44:49.037 に答える
1

+組み込み型の の意味を変更することはできません。インスタンスが数値のように振る舞う独自のクラスを作成すると、必要なことを+行うことができます。

1 つの方法は、既存の型をラップするシン クラスを作成することです。

class mynumber {
  int n;
public:
  mynumber(int n_init) : n(n_init) { }
};

mynumberのオーバーロードや、変換演算子などを記述できるようになりました。

重要なのは、オーバーロードがクラス (および列挙型) で機能することです。

于 2012-10-20T06:50:36.530 に答える
1

関数内で に変更if(k == 9)します。を削除します。if(k >= 9)void add_one(int k)&void add_one(int &k)

#include <iostream>
using namespace std;



void add_one(int k){
   if(k >= 9){
      k = 1;
   }else{
      k = k+1;
   }
   cout<<" k="<<k<<"  \n";
}


int main(void)
{
  int k ;
  for(k=0;k<20;k++)  
  {
      cout<<"input "<<k<<" ";
      add_one(k);
  }

  cout<<" \nPress any key to continue\n";
  cin.ignore();
  cin.get();

   return 0;
}

出力:

input 0  k=1
input 1  k=2
input 2  k=3
input 3  k=4
input 4  k=5
input 5  k=6
input 6  k=7
input 7  k=8
input 8  k=9
input 9  k=1
input 10  k=1
input 11  k=1
input 12  k=1
input 13  k=1
input 14  k=1
input 15  k=1
input 16  k=1
input 17  k=1
input 18  k=1
input 19  k=1

Press any key to continue
于 2012-10-20T06:59:59.057 に答える