2012-10-20 57 views
0

我有一个10个整数的数组,k是一个循环遍历数组的整数。每当我做'k = k + 1',一个被添加到'k',(如果'k'是7,那么它变成8)。但是如果'k'达到9,我不想'k + 1'评价为10,我希望它变成1;如何告诉c + + 9 + 1应该是1而不是10?

我认为使用这样的功能:

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?

+2

如果它是一个数组,你不希望它从9到0? – chris

+1

对于Bjarne的缘故,你为什么要改变整数的“+”的含义?下一步是什么?你想改变3的值? –

+0

更好的意思是什么?您可以使用三元运算符写if语句,或者按照答案中的建议使用%。 – Rndm

回答

3

你可以使用类似的表达式:

k = k % 9 + 1; 
+0

是的,这是一个好主意,但有没有更好的方法,以便每当我加1到K,我只需要做K = K + 1和C++会照顾其余的? – 2147483647

+0

哦,对不起,我没有注意到基于1的索引。定影。 –

+0

@ A.06:你可以通过操作符重载,但是你最终得到的东西将不再是'int'。将整数保持为整数可能是最好的。 –

1

你不能改变的+含义为内置型。如果你编写自己的类,其实例的行为像数字,那么你可以让+做你想做的。

一种方法是只是做一个薄类包装现有类型:

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

现在你可以写mynumber超载,以及像转换操作符等等的东西。

关键是重载与类(和枚举)一起工作。

+0

谢谢你的回复 – 2147483647

1

在函数void add_one(int k)中将if(k == 9)更改为if(k >= 9)。删除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 
+0

而不是使用+符号我使用我的函数add_one, 所以这个函数绝不会让'k'大于9,但是谢谢你,最好是安全的。 – 2147483647

相关问题