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

C++ 如何告诉c++;那9+;1应该是1而不是10?,c++,operators,operator-overloading,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); 然后我发现了操作符重载,但它非常混乱,我认为一定有更好

我有一个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?< /p> < p>可以使用如下表达式:
k = k % 9 + 1;

您可以使用如下表达式:

k = k % 9 + 1;

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

一种方法是创建一个封装现有类型的精简类:

class mynumber {
  int n;
public:
  mynumber(int n_init) : n(n_init) { }
};
现在,您可以为
mynumber
编写重载,以及转换运算符等内容


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

不能更改内置类型的
+
的含义。如果您编写自己的类,其实例的行为类似于数字,那么您可以让
+
做您想做的事情

一种方法是创建一个封装现有类型的精简类:

class mynumber {
  int n;
public:
  mynumber(int n_init) : n(n_init) { }
};
现在,您可以为
mynumber
编写重载,以及转换运算符等内容

关键是重载对类(和枚举)有效。

将函数
中的
if(k==9)
更改为
if(k>=9)
。删除
void add_one(int&k)
中的

将函数
void add_one(int k)
中的
if(k==9)
更改为
if(k>=9)
。删除
void add_one(int&k)
中的



如果它是一个数组,你不想让它从9变为0吗?看在比亚恩的份上,你为什么要改变整数的
+
的含义?下一步是什么?要更改3的值吗?更好的含义是什么?您可以使用三元运算符或答案中建议的%编写if语句。@chris我希望在循环数组时跳过索引0,因为它存储的值与所有其他索引的值完全不同。什么?它大概有四行,你已经写了,它的功能非常清楚,现在你想要重载“+”还是什么?什么?你为什么要把时间浪费在这件事上,还是我们的?你没有什么真正的bug需要担心吗?如果它是一个数组,你不希望它从9变为0吗?看在比亚恩的份上,你为什么要改变整数的
+
的含义?下一步是什么?要更改3的值吗?更好的含义是什么?您可以使用三元运算符或答案中建议的%编写if语句。@chris我希望在循环数组时跳过索引0,因为它存储的值与所有其他索引的值完全不同。什么?它大概有四行,你已经写了,它的功能非常清楚,现在你想要重载“+”还是什么?什么?你为什么要把时间浪费在这件事上,还是我们的?你没有任何真正的bug需要担心吗?是的,这是个好主意,但是有更好的方法,所以每当我添加1到K,我只需要做K= K+ 1和C++将照顾其余的?哦,对不起,我没有注意到1的索引。修复。@A.06:可以通过运算符重载,但最终得到的将不再是
int
。可能最好将整数保持为整数。@GregHewgill我搜索过运算符重载,但它非常有用confusing@A.06我不建议使用操作员重载来实现这个目的。是的,这是个好主意,但是有更好的方法,所以每当我给K加1,我就必须做K= K+ 1,C++会处理剩下的吗?抱歉,我没有注意到基于1的索引。修复。@A.06:可以通过运算符重载,但最终得到的将不再是
int
。可能最好将整数保持为整数。@GregHewgill我搜索过运算符重载,但它非常有用confusing@A.06:是的,我不建议为此使用运算符重载。我使用的函数是add_one,而不是+符号,因此此函数永远不会让“k”大于9,但谢谢您,最好是安全的。我使用的函数不是+符号,而是加上一个,所以这个函数永远不会让“k”大于9,但是谢谢你,最好是安全的。