如何告诉c ++ 9 + 1应该是1而不是10?

时间:2012-10-20 06:43:18

标签: c++ operators operator-overloading

我有一个包含10个整数的数组,k是一个遍历数组的整数。 每当我做'k = k + 1'时,一个被添加到'k',(如果'k'是7,那么它变为8)。但如果'k'达到9,我不希望'k + 1'评价为10,我希望它变为1;

我考虑使用这样的函数:

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

每当我想在'k'中添加一个:

add_one(k);

然后我发现了运算符重载,但它非常令人困惑,并认为必须有更好的方法。我们可以告诉c ++,只要它看到k + 1,其中k = 9,它必须返回1而不是10?

3 个答案:

答案 0 :(得分:3)

您可以使用如下表达式:

k = k % 9 + 1;

答案 1 :(得分:1)

您无法更改内置类型的+的含义。如果你编写自己的类,其实例的行为与数字相似,那么你可以让+做你想做的事。

一种方法是创建一个包装现有类型的瘦类:

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

现在您可以为mynumber编写重载,以及转换运算符等等。

关键是重载适用于类(和枚举)。

答案 2 :(得分: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