Re: [問題] 例外處理的技巧?
看板C_and_CPP (C/C++)作者littleshan (我要加入劍道社!)時間15年前 (2010/12/31 14:13)推噓1(1推 0噓 4→)留言5則, 3人參與討論串2/2 (看更多)
※ 引述《icetofux ()》之銘言:
: 程式碼(Code): (請善用置底文標色功能)
: http://codepad.org/oQyBJLMx
: 補充說明(Supplement):
: 上面的程式碼是我參考其他網站用類別來做出陣列,其中37~46行的地方,我在使用者
: 發生違規取值時拋出一個例外,但是除了印出警告外,使用者還是可以取得一個我指
: 定的返回值0,我希望用更嚴謹的方式來處理類似的問題,比方說發生違規存取時直接
: 終止程式的執行,但是我不想把try、throw、catch拉到54行的for迴圈來處理,因為
: 這表示未來我在處理Get()成員函式都得加上冗長的例外處理。
: 請問有沒有其他方式可以達到我想要的效果呢?
: 謝謝
我猜你想做到的效果是這樣:當 Get() 越界的時候印出警告,並且終止程式
如果目的是這樣的話,程式碼其實很簡單:
int Array::Get(int Inx)
{
if(Inx>EndAddr){
cout<<"Input index: "<<Inx<<" over then array size!"<<endl;
throw Inx; // 如果Inx超過陣列大小,丟出例外。
}
return ArrPtr[Inx];
}
迴圈的地方不變
這麼一來只要使用者越界存取,
這個 exception 因為沒有被 catch 到
會直接中止程式執行
如果使用者不希望程式被中止
只要在迴圈外加上 try/catch 即可
不過建議你不要直接拿 int 當作 exception 物件
用 std::range_error 會比較好
然後你可以把警告訊息存在 exception 物件中
讓使用者自行決定如何顯示
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.15.163
推
12/31 14:22, , 1F
12/31 14:22, 1F
→
12/31 14:23, , 2F
12/31 14:23, 2F
→
12/31 20:48, , 3F
12/31 20:48, 3F
→
12/31 20:48, , 4F
12/31 20:48, 4F
→
12/31 23:14, , 5F
12/31 23:14, 5F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章
11
38