首頁  >  文章  >  後端開發  >  C++ 技術中的異常處理:如何透過基底類別指標來擷取衍生類別異常?

C++ 技術中的異常處理:如何透過基底類別指標來擷取衍生類別異常?

WBOY
WBOY原創
2024-05-09 17:39:01855瀏覽

C 中可透過基底類別指標擷取派生類別異常。利用虛擬函數和try-catch 區塊,我們可以:拋出衍生類別例外使用基底類別指標捕捉它透過刪除基底類別指標自動釋放衍生類別物件

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

    # #C 中異常處理:透過基底類別指標捕捉衍生類別異常
  • 在C 中,異常處理是一種處理錯誤和異常情況的機制。當發生異常時,會拋出異常物件。異常物件儲存有關錯誤的訊息,例如錯誤訊息和發生錯誤的位置。 透過基底類別指標捕獲派生類別異常是一種靈活的方法,可以處理來自派生類別的異常。這是透過使用 try-catch 區塊和虛函數來實現的。
  • 程式碼範例:假設我們有一個基底類別 Shape 和一個衍生類別 Square。 Shape 類別有一個虛擬函數 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_ptr###,自動釋放指向衍生類別物件的指標。 ######

以上是C++ 技術中的異常處理:如何透過基底類別指標來擷取衍生類別異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn