สมมติว่ามีฟังก์ชันที่คำนวณการดำเนินการทางคณิตศาสตร์ที่ซับซ้อนอย่างร้ายแรง แต่ระหว่างการดำเนินการ อาจมีข้อยกเว้นบางประการ เราต้องจัดการกับข้อยกเว้นประเภทต่างๆ ที่อาจเกิดขึ้นและดำเนินการดังต่อไปนี้
- หากคอมพิวเตอร์ไม่สามารถจัดสรรหน่วยความจำสำหรับการคำนวณได้ เราต้องพิมพ์ 'Memory Low!'
- หากมีข้อยกเว้นอื่นๆ ที่เกี่ยวข้องกับ C++ เราต้องพิมพ์ 'Exception:' ตามด้วยข้อยกเว้น
- หากมีอย่างอื่นเกิดขึ้น เราจะพิมพ์ 'Unhandled exception'.
เราได้รับอาร์เรย์ที่มีค่าคู่หนึ่งและเราส่งต่อไปยังฟังก์ชัน หากมีข้อยกเว้นใดๆ เกิดขึ้น เราจะจัดการกับมัน หรือมิฉะนั้น เราจะพิมพ์ค่าผลลัพธ์
เราต้องจัดการกับข้อยกเว้นโดยไม่คำนึงถึงกลไกของฟังก์ชันที่สร้างข้อยกเว้นเท่านั้น
ดังนั้น หากอินพุตเป็นเหมือน arr ={{361643035132, 2297873642249}, {-17, 15}}; ผลลัพธ์จะเป็น −
Memory Low! Exception: val1 is negative
ค่าคู่แรกมีขนาดใหญ่เกินกว่าจะจัดการได้ ดังนั้นจึงพิมพ์ 'หน่วยความจำเหลือน้อย' ค่าแรกของคู่ที่สองเป็นค่าลบ ฟังก์ชันที่ให้ไว้ไม่สามารถทำงานได้ดังนั้นจึงสร้าง/ส่งข้อยกเว้น 'val1 เป็นค่าลบ'
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- สำหรับการเริ่มต้น i :=0, เมื่อ i
- val1 :=ค่า[i, 0]
- val2 :=ค่า[i, 1]
- ลองดู
- print(foo(val1, val2))
- หากไม่สามารถจัดสรรหน่วยความจำได้ (ตรวจพบข้อยกเว้น bad_alloc) แล้ว
- print("หน่วยความจำเหลือน้อย!")
- มิฉะนั้น หากตรวจพบข้อยกเว้น C++ มาตรฐานอื่นๆ แล้ว
- print("ข้อยกเว้น:")
- พิมพ์รายละเอียดของข้อยกเว้น
- มิฉะนั้น หากตรวจพบข้อยกเว้นอื่นๆ แล้ว
- print("ข้อยกเว้นที่ไม่สามารถจัดการได้")
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <iostream> #include <exception> #include <string> #include <stdexcept> #include <vector> #include <cmath> using namespace std; class Solution { private: static int value; public: static int foo(long long val1, long long val2) { value += 1; if(val1 < 0) { throw std::invalid_argument("val1 is negative"); } vector<int> vectorList(val1, 0); int r = -1, c = sqrt(-1); if(val2 == 0) throw 0; r = (val1 / val2) * r; int ans = vectorList.at(val2); return r + val1 - val2 * ans; } static int getVal() { return value; } }; int Solution::value = 0; void solve(int t, long int values[][2]) { for (int i = 0; i < t; i++) { long long val1, val2; val1 = values[i][0]; val2 = values[i][1]; try { cout << Solution::foo(val1, val2) << '\n'; } catch (const std::bad_alloc&) { cout << "Memory Low!\n"; } catch (const std::exception& e) { cout << "Exception: " << e.what() << '\n'; } catch (...) { cout << "Unhandled Exception\n"; } } } int main() { long int arr[][2] = {{361643035132, 2297873642249}, {-17, 15}}; solve(2, arr); }
อินพุต
long int arr[][2] = {{361643035132, 2297873642249}, {-17, 15}}; solve(2, arr);
ผลลัพธ์
Memory Low! Exception: val1 is negative