2012-10-20 54 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

相關問題