วิธีจัดการกับข้อยกเว้นอย่างง่ายดายใน C ++
การจัดการข้อยกเว้นในภาษา C++ หมายถึงกลไกในการตรวจจับข้อผิดพลาดรันไทม์และการจัดการอย่างมีประสิทธิภาพ เช่น การจัดการอินพุตที่ไม่ถูกต้อง การหารตัวเลขด้วยศูนย์ในการหาร และอื่นๆ อีกมากมาย
การจัดการข้อยกเว้นในภาษา C++ เกี่ยวข้องกับคำหลักสามคำ: พยายาม โยน และจับ คำสั่ง try อนุญาตให้ผู้ใช้กำหนดบล็อกของโค้ดที่อาจก่อให้เกิดข้อยกเว้นในโค้ด คีย์เวิร์ด Throw จะส่งข้อยกเว้นหากตรวจพบหลังจากตรวจสอบบล็อกภายใต้คีย์เวิร์ด Try คำสำคัญ catch มีบล็อกของโค้ดที่สามารถจัดการข้อยกเว้นที่พบในบล็อก try
ตัวอย่างที่ 1: การจัดการข้อยกเว้นระหว่างการแบ่ง
รหัสถูกเขียนขึ้นเพื่อตรวจสอบข้อยกเว้นระหว่างการแบ่ง
#รวม
โดยใช้ เนมสเปซ มาตรฐาน ;
ภายใน หลัก ( ) {
สองเท่า ตัวเศษ, ตัวส่วน, การหาร ;
ศาล << 'ป้อนค่าตัวเศษ:' ;
การกิน >> เศษ ;
ศาล <> ตัวส่วน ;
พยายาม {
ถ้า ( ตัวส่วน == 0 )
โยน 0 ;
แผนก = เศษ / ตัวส่วน ;
ศาล << เศษ << '/' << ตัวส่วน << ' = ' << แผนก << สิ้นสุด ;
}
จับ ( ภายใน num_ข้อยกเว้น ) {
ศาล << 'ผิดพลาด! ตัวหารไม่สามารถเป็น ' << num_ข้อยกเว้น << สิ้นสุด ;
}
กลับ 0 ;
}
ในโปรแกรมนี้ ผู้ใช้ป้อนค่าของตัวเศษและตัวส่วนที่ประกาศไว้ในส่วน main() ในบล็อก try จะใช้คำสั่ง if เพื่อตรวจสอบข้อยกเว้นว่าตัวส่วนเป็นศูนย์หรือไม่ เนื่องจากการหารไม่สามารถดำเนินการด้วยตัวหารศูนย์ได้หากพบว่าตัวส่วนเป็น 0 การหารจะเกิดข้อยกเว้นและบล็อก catch จะส่งกลับอาร์กิวเมนต์ข้อผิดพลาด มิฉะนั้นจะดำเนินการหารแบบง่าย
ผู้ใช้ป้อนตัวเศษ 42 และ 0 ในตัวส่วน ซึ่งส่งข้อยกเว้น ดังนั้นโปรแกรมจึงส่งคืนอาร์กิวเมนต์ข้อผิดพลาด
ผู้ใช้ป้อนเศษ 42 และ 2 เป็นตัวส่วน เนื่องจากไม่พบข้อยกเว้น ผลลัพธ์ที่ได้หลังจากการหารกลับคืนมา
ตัวอย่างที่ 2 การจัดการข้อยกเว้นในการตรวจสอบอายุ
โปรแกรมนี้ตรวจสอบข้อยกเว้นตามอายุของผู้ใช้
#รวมโดยใช้ เนมสเปซ มาตรฐาน ;
/*
ในที่นี้ เราต้องการทิ้งข้อยกเว้น (อายุเป็นข้อยกเว้น) หากอายุของบุคคลนั้นน้อยกว่า 18 ปี
*/
ภายใน หลัก ( )
{
// ตรวจสอบว่าอายุเกิน 18 หรือไม่ในการลองบล็อก
พยายาม
{
ภายใน อายุ ;
ศาล << 'ป้อนอายุของคุณเพื่อเข้าถึง:' ;
การกิน >> อายุ ;
ถ้า ( อายุ >= 18 )
{
ศาล << 'ได้รับสิทธิ์การเข้าถึงแล้ว' ;
}
// มีข้อยกเว้นแบบกำหนดเองหากอายุต่ำกว่า 18 ปี
อื่น
{
โยน ( อายุ ) ;
}
}
// จับข้อยกเว้นที่เกิดขึ้นและแสดงผลลัพธ์ที่ต้องการ (ปฏิเสธการเข้าถึง!)
จับ ( ภายใน x )
{
ศาล << 'การเข้าถึงถูกปฏิเสธ! คุณยังไม่บรรลุนิติภาวะ' << สิ้นสุด ;
}
กลับ 0 ;
}
ในโปรแกรมนี้ จะมีการกำหนดตัวแปรที่มีค่าจำนวนเต็ม ผู้ใช้จะถูกขอให้ป้อนอายุและลองบล็อกตรวจสอบว่าอายุของผู้ใช้มากกว่าหรือเท่ากับ 18 หรือไม่ หากไม่เป็นความจริง ระบบจะส่งข้อยกเว้น และบล็อกข้อยกเว้นจะส่งคืน Access ถูกปฏิเสธ! การโต้แย้ง. มิฉะนั้นจะได้รับอนุญาตให้เข้าถึงได้
ผู้ใช้ป้อนอายุเป็น 12 เพื่อตรวจสอบสิทธิ์การเข้าถึง เนื่องจากอายุนี้ต่ำกว่า 18 ปี ดังนั้นอาร์กิวเมนต์ปฏิเสธการเข้าถึงจึงถูกส่งกลับ
ผู้ใช้ป้อนอายุ 20 เนื่องจากอายุมากกว่า 18 ปี ดังนั้นจึงให้สิทธิ์การเข้าถึงแก่ผู้ใช้
บันทึก : หากไม่มี catch block ในโปรแกรม โปรแกรมจะทำงานผิดปกติและยุติการทำงานอย่างไม่คาดคิดในกรณีที่มีข้อยกเว้น
บทสรุป
การจัดการข้อยกเว้นในภาษา C++ หมายถึงกลไกของการตรวจจับข้อผิดพลาดรันไทม์และการจัดการอย่างมีประสิทธิภาพ ประกอบด้วยคำสำคัญสามคำคือ try, Throw และ catch มีการตรวจสอบข้อยกเว้นสำหรับโค้ดในบล็อก try คีย์เวิร์ด Throw จะส่งข้อยกเว้นหากพบ และบล็อก catch จะจัดการข้อยกเว้นที่เกิดขึ้นสำหรับบล็อก Try การจัดการข้อยกเว้นทำให้ประสบการณ์ผู้ใช้ราบรื่นและยอดเยี่ยมโดยหลีกเลี่ยงข้อผิดพลาดรันไทม์