詳解C++異常處理機制示例介紹

1.C++異常處理的套路

C++異常處理機制之拋出異常關鍵字:throw

throw關鍵字的使用:

在哪可能出現異常就在哪裡使用throw關鍵字拋出異常。 這個異常可以使用一個常量,字符串,或類對象,都可以來拋出。 throw + 常量、字符串、數對象 :用表示拋出一個異常。 throw拋出的異常將層層向外拋出,至少有try….catch…語句來捕獲這個異常並處理這個異常。 如果最外層的主函數也不進行處理,那麼主程序將自動停止。

使用try{ …. } catch(exp ){..} 捕獲並處理異常:

try
{
    //有可能出現的異常的代碼放在try語句塊中。
    //在try語句塊中就可以捕獲這個異常。
    //如果try語句塊中的代碼出現異常,即自動跳轉到catch語句塊進行異常處理。
}catch(被捕獲的異常)
{
    //catch的語句塊裡是用來處理異常。
}

代碼實例:

#include <iostream>
using namespace std;
int my_add(int a,int b)
{
    if(b==0){
        throw -1;
    }
    return a/b;
}
int add(int a,int b)
{
    return a+b+my_add(a,b);
}
int main()
{
    try {
        add(10,0);
    } catch (int num) {
        if(num==-1){
            cout<<"被除數不能為0"<<endl;
        }
    }
    return 0;
}

結果圖:

2.C++標準異常庫中常用的幾個異常處理類

2.1異常類的例子

#include <iostream>
using namespace std;
int my_add(int a,int b)
{
    if(b==0){
        out_of_range  err("被除數不能為0");
        throw err;
    }
    return a/b;
}
int add(int a,int b)
{
    return a+b+my_add(a,b);
}
int main()
{
    try {
        add(10,0);
    } catch (out_of_range & err) {
 
            cout<<err.what()<<endl;
    }
    return 0;
}

2.2封裝一個自定義異常類

#include <iostream>
using namespace std;
class Err
{
 string err;
public:
    Err(string err)
    {
        this->err=err;
    }
    string what()
    {
        cout<<"被除數不能為0"<<endl;
    }
};
int my_add(int a,int b)
{
    if(b==0){
        Err  err("被除數不能為0");
        throw err;
    }
    return a/b;
}
int add(int a,int b)
{
    return a+b+my_add(a,b);
}
int main()
{
    try {
        add(10,0);
    } catch (Err & err) {
 
            cout<<err.what()<<endl;
    }
    return 0;
}

到此這篇關於詳解C++異常處理機制示例介紹的文章就介紹到這瞭,更多相關C++異常處理內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: