Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จับบล็อกและแปลงประเภทใน C ++


ในส่วนนี้ เราจะมาดูวิธีการใช้ catch block สำหรับการจัดการข้อยกเว้นและการแปลงประเภทใน C++

ขั้นแรก ให้เราดูโค้ด แล้วมาดูกันว่าผลลัพธ์จะเป็นอย่างไร และจะสร้างได้อย่างไร

ตัวอย่าง

#include <iostream>
using namespace std;
int main() {
   try{
      throw 'a';
   }
   catch(int a) {
      cout << "Integer value is caught :" << a;
   }
   catch(...) {
      cout << "Entering into default catch block";
   }
}

ผลลัพธ์

Entering into default catch block

ดังนั้นเหตุผลที่อยู่เบื้องหลังนี้คืออะไร เหตุใดจึงสร้างเอาต์พุตประเภทนี้ ดังที่เราเห็นตัวละคร 'a' ถูกโยนออกไป แต่บล็อก catch แรกมีไว้สำหรับ int หากเราคิดว่า ASCII ของ 'a' เป็นจำนวนเต็ม ก็จะเข้าสู่บล็อกแรก แต่การแปลงประเภทนั้นใช้ไม่ได้กับบล็อกที่ดักจับ

เรามาดูตัวอย่างอื่นกัน ในตัวอย่างนี้ เราจะเห็นว่าคอนสตรัคเตอร์ไม่ได้ถูกเรียกสำหรับอ็อบเจกต์ที่ถูกโยน

ตัวอย่าง

#include <iostream>
using namespace std;
class TestExcept1 {};
class TestExcept2 {
   public:
      TestExcept2 (const TestExcept1 &e ){ // Defining the Conversion constructor
         cout << "From the Conversion constructor";
      }
};
main() {
   try{
      TestExcept1 exp1;
      throw exp1;
   } catch(TestExcept2 e2) {
      cout << "Caught TestExcept2 " << endl;
   } catch(...) {
      cout << "Entering into default catch block " << endl;
   }
}

ผลลัพธ์

Entering into default catch block

วัตถุประเภทที่ได้รับจะไม่ถูกแปลงเป็นวัตถุประเภทพื้นฐานในขณะที่วัตถุประเภทที่ได้รับจะถูกส่งออกไป