中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c++異常3

發布時間:2020-07-21 20:25:11 來源:網絡 閱讀:397 作者:神ge 欄目:編程語言
#include <iostream>                                                                                                                    
#include <iostream>
using namespace std;
class FileError{};
class MemoryError{};
void foo(void)throw(MemoryError,FileError,int,double);
int main(void)
{
    try{
        foo();
    }
    catch(FileError& ex){
        cout << "file error!" << endl;
        return -1;
    }
    catch(MemoryError& ex){
        cout << "memory error!" << endl;
        return -1;
    }
    catch(int ex&){//int類型只能捕捉double,同樣double只能捕捉double.
        cout << ex << endl;
    }
    catch(...){//這里會捕捉所有異常列表的異常對象
        cout << "other error!" << endl;
        return -1;
    }
    return 0;
}
void foo(void)throw(FileError,MemoryError,int,double){//與函數聲明一樣,不多不少.
    throw -1;
    //throw FileError();
}

異常說明:

1)可以在函數原型中增加異常說明,說明該函數所有可能拋出的異常類型.

 返回類類型 函數名(形參表)throw(對象1,對象2,...);(這里對象可以為基本類型)

對象1,對象2...被稱為異常說明表

2)函數的異常說明是一種承諾,表示函數所拋出的異常不會超出異常說明表,如果超出,將無法被捕獲

即使catch中接受對象的類型也無法被捕獲,最終會被系統捕獲,終止程序.

3)throw;表示可以拋出任何異常,thow();表示不會拋出異常

4)如果函數申明和定義分開,如果聲明時有異常說明,則定義時也要有異常說明,異常說明表要一模一樣,

當然,異常說明表中異常對象的位置可以隨意.

5)如果基類中的虛函數帶有異常說明,那么該函數在子類中的覆蓋版本不能在異常說明表中拋出的異常對象不能比基類多(屬于包含關系)

6)如果構造函數中拋出異常,則對象將不會調用析構函數(怎么都不會調用),這時需要手動銷毀在異常之前

7)不允許在析構函數中拋出異常,如果你在析構中拋異常,這個類一旦實例化,就報錯.
所有動態分配的資源.

#include <iostream>
using namespace std;
class A{
    public:
        A():m_p(new int(5)){
            cout << "A:A()" << endl;
            delete m_p;
            throw -1;//析構函數不會調用,拋出異常前,手動釋放動態分配的內存
        }
        ~A(){
            cout << "haha" << endl;
            delete m_p;
        }                                                                                                                              
    private:
        int* m_p;
};
int main(void){
    A a;//這樣就直接報錯.
    return 0;
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长子县| 宣汉县| 松江区| 寿宁县| 海盐县| 左权县| 南昌县| 安平县| 色达县| 涟水县| 株洲县| 辛集市| 临清市| 彭山县| 海晏县| 正定县| 寻乌县| 雅江县| 建水县| 弥勒县| 富平县| 汉沽区| 武川县| 尉犁县| 甘孜县| 思南县| 聊城市| 哈尔滨市| 凉城县| 永济市| 嘉峪关市| 靖边县| 沂南县| 海原县| 贞丰县| 牙克石市| 久治县| 德清县| 台江县| 南宫市| 武隆县|