สมมติว่ามีฟังก์ชันที่คำนวณการดำเนินการทางคณิตศาสตร์ที่ซับซ้อนอย่างร้ายแรง แต่ระหว่างการดำเนินการ อาจมีข้อยกเว้นบางประการ เราต้องจัดการกับข้อยกเว้นประเภทต่างๆ ที่อาจเกิดขึ้นและดำเนินการดังต่อไปนี้
- หากคอมพิวเตอร์ไม่สามารถจัดสรรหน่วยความจำสำหรับการคำนวณได้ เราต้องพิมพ์ '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