c++異常3-創(chuàng)新互聯(lián)

#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(...){//這里會(huì)捕捉所有異常列表的異常對象
        cout << "other error!" << endl;
        return -1;
    }
    return 0;
}
void foo(void)throw(FileError,MemoryError,int,double){//與函數(shù)聲明一樣,不多不少.
    throw -1;
    //throw FileError();
}

異常說明:

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

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

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

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

即使catch中接受對象的類型也無法被捕獲,最終會(huì)被系統(tǒng)捕獲,終止程序.

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

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

當(dāng)然,異常說明表中異常對象的位置可以隨意.

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

6)如果構(gòu)造函數(shù)中拋出異常,則對象將不會(huì)調(diào)用析構(gòu)函數(shù)(怎么都不會(huì)調(diào)用),這時(shí)需要手動(dòng)銷毀在異常之前

成都創(chuàng)新互聯(lián)公司專注于弓長嶺企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城開發(fā)。弓長嶺網(wǎng)站建設(shè)公司,為弓長嶺等地區(qū)提供建站服務(wù)。全流程按需定制設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

7)不允許在析構(gòu)函數(shù)中拋出異常,如果你在析構(gòu)中拋異常,這個(gè)類一旦實(shí)例化,就報(bào)錯(cuò).
所有動(dòng)態(tài)分配的資源.

#include <iostream>
using namespace std;
class A{
    public:
        A():m_p(new int(5)){
            cout << "A:A()" << endl;
            delete m_p;
            throw -1;//析構(gòu)函數(shù)不會(huì)調(diào)用,拋出異常前,手動(dòng)釋放動(dòng)態(tài)分配的內(nèi)存
        }
        ~A(){
            cout << "haha" << endl;
            delete m_p;
        }                                                                                                                              
    private:
        int* m_p;
};
int main(void){
    A a;//這樣就直接報(bào)錯(cuò).
    return 0;
}

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

當(dāng)前文章:c++異常3-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://muchs.cn/article30/dhiopo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、App開發(fā)、搜索引擎優(yōu)化、響應(yīng)式網(wǎng)站網(wǎng)站設(shè)計(jì)、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司