0

我有一个由 10 个整数组成的数组,k 是一个循环遍历数组的整数。每当我执行 'k = k+1' 时,都会将 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 = 9 的 k+1 时,它必须返回 1 而不是 10?

4

3 回答 3

3

您可以使用如下表达式:

k = k % 9 + 1;
于 2012-10-20T06:44:49.037 回答
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)。删除&in 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 回答