Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pengendalian pengecualian dalam teknologi C++: Bagaimana untuk menangkap pengecualian kelas terbitan melalui penunjuk kelas asas?

Pengendalian pengecualian dalam teknologi C++: Bagaimana untuk menangkap pengecualian kelas terbitan melalui penunjuk kelas asas?

WBOY
WBOYasal
2024-05-09 17:39:01898semak imbas

Dalam C++, pengecualian kelas terbitan boleh ditangkap melalui penunjuk kelas asas. Menggunakan fungsi maya dan blok cuba-tangkap, kita boleh: Lemparkan pengecualian kelas terbitan Tangkapnya menggunakan penuding kelas asas Lepaskan objek kelas terbitan secara automatik dengan memadamkan penuding kelas asas

C++ 技术中的异常处理:如何通过基类指针来捕获派生类异常?

Pengendalian pengecualian dalam C++: Menangkap kelas terbitan melalui penuding kelas asas Class Exceptions

Dalam C++, pengendalian pengecualian ialah mekanisme untuk mengendalikan ralat dan pengecualian. Apabila pengecualian berlaku, objek pengecualian dilemparkan. Objek pengecualian menyimpan maklumat tentang ralat, seperti mesej ralat dan lokasi ralat berlaku.

Menangkap pengecualian kelas terbitan melalui penunjuk kelas asas ialah cara yang fleksibel untuk mengendalikan pengecualian daripada kelas terbitan. Ini dicapai dengan menggunakan blok cuba-tangkap dan fungsi maya.

Contoh Kod:

Andaikan kita mempunyai kelas asas Bentuk dan kelas terbitan Square. Kelas Shape mempunyai fungsi maya GetArea(), yang digantikan oleh kelas Square. GetArea(),Square 类覆盖了该函数。

class Shape {
public:
    virtual int GetArea() const = 0;
};

class Square : public Shape {
public:
    Square(int side) : side(side) {}
    int GetArea() const override { return side * side; }
private:
    int side;
};

int main() {
    try {
        Shape* shape = new Square(5);
        shape->GetArea();  // 抛出异常
    } catch (Shape* base_ptr) {
        // 捕获 Shape* 指针的基类指针
        delete base_ptr;  // 确保释放派生类对象
        std::cout << "异常捕获成功!" << std::endl;
    }

    return 0;
}

解释:

  • GetArea() 在派生类 Square 中抛出异常。
  • main() 函数中,我们创建一个 Shape* 指针,指向一个 Square 对象。
  • 当调用 shape->GetArea() 时,它实际上调用的是派生类的覆盖函数,并且抛出一个异常。
  • catch 块使用基类指针 base_ptr 捕获异常对象。
  • 通过捕获基类指针,我们可以处理派生类的异常。
  • 最后,我们删除 base_ptrrrreee
Penjelasan: 🎜🎜
  • GetArea() membuang pengecualian dalam kelas terbitan Square. 🎜
  • Dalam fungsi main(), kami mencipta penunjuk Shape* yang menunjuk ke objek Square. 🎜
  • Apabila shape->GetArea() dipanggil, ia sebenarnya memanggil fungsi overriding kelas terbitan dan membuang pengecualian. 🎜 blok
  • catch menggunakan penunjuk kelas asas base_ptr untuk menangkap objek pengecualian. 🎜
  • Dengan menangkap penunjuk kelas asas, kami boleh mengendalikan pengecualian daripada kelas terbitan. 🎜
  • Akhir sekali, kami memadamkan base_ptr dan secara automatik melepaskan penuding ke objek kelas terbitan. 🎜🎜

Atas ialah kandungan terperinci Pengendalian pengecualian dalam teknologi C++: Bagaimana untuk menangkap pengecualian kelas terbitan melalui penunjuk kelas asas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn