我有一个包含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?
答案 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