C++ 如何告诉c++;那9+;1应该是1而不是10?
我有一个10个整数的数组,k是一个在数组中循环的整数。 每当我做'k=k+1',一个被加到'k',(如果'k'是7,那么它变成8)。但是如果k达到9,我不希望k+1等于10,我希望它变成1 我考虑过使用这样的函数: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); 然后我发现了操作符重载,但它非常混乱,我认为一定有更好
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,但是谢谢你,最好是安全的。