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

溫馨提示×

溫馨提示×

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

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

C語言或C++中異常處理詳解及其作用介紹

發布時間:2021-09-02 17:29:40 來源:億速云 閱讀:221 作者:chen 欄目:開發技術

本篇內容主要講解“C語言或C++中異常處理詳解及其作用介紹”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C語言或C++中異常處理詳解及其作用介紹”吧!

目錄
  • 概述

  • 異常處理

  • 異常處理機制

  • 函數聲明指定異常

  • 練習

    • 案例一

    • 案例二

概述

作為一名專業寫 Bug, 編程一天改 bug 一周的程序員. 學會異常處理是非常重要的. 我們不僅要考慮沒有錯誤的理想情況, 更要考慮存在錯誤時的情況.

Debug 可以幫助我們盡快發現錯誤, 消除錯誤. 錯誤類別:

  • 語法錯誤

  • 運行錯誤

  • 邏輯錯誤

異常處理

設計程序時, 事先分析程序運行時可能出現的各種意外情況, 定制出相應的處理方法. 異常處理指對運行時出現的差錯以及其他例外情況的處理.

沒有異常處理程序時, 運行出現異常, 程序只能終止運行. 設置了異常處理機制, 運行出現異常, 程序的流程就轉到異常處理代碼段處理. 用戶可以指定進行任何的處理.

舉一個除數為 0 的例子:

#include <iostream>
using namespace std;

template <typename T>
T Div(T x, T y);

int main() {
    // 聲明變量
    int x, y;
    double x1, y1;

    // 賦值
    cin >> x >> y;
    cin >> x1 >> y1;

    // 輸出商
    cout << x << "/" << y << "=" << Div(x, y) << endl;
    cout << x1 << "/" << y1 << "=" << Div(x1, y1) << endl;

    return 0;
}

template <typename T>
T Div(T x, T y) {
    return x / y;
}

輸出結果:

C語言或C++中異常處理詳解及其作用介紹

眾所周知分母不能為 0, 所以在這里我們可以看見程序終止運行了.

異常處理機制

我們把程序運行時的錯誤統稱為異常. 對異常的處理統稱為異常處理. C++ 中所提供的異常處理機制結構清晰, 在一定程度上可以保證程序的健壯性.

C++ 中處理異常的過程:

  • 在執行程序發生異常, 可以不在本函數中處理. 而是拋出一個錯誤信息, 把它傳遞給上一級的函數來解決. 上一級解決不了, 再傳給其上一級, 由其上一級處理.

  • 如此主機上傳, 直到最高一級還無法處理的話, 運行系統會調用 abort 終止程序.

格式:

try {
    被檢查語句
    throw 異常
}
catch(異常類型1) {
    進行異常處理的語句1
}
catch(異常類型2) {
    進行異常處理的語句2
}
  • 把需要檢查的語句放在 try 模塊中

  • try 和 catch 作為一個整體出現

  • try 和 catch 塊中必須用話括號括起來, 即使花括號內只有一個語句

  • 檢查語句發生錯誤, throw 拋出異常, 發出錯誤信息

  • 由 catch 來捕捉異常信息, 并加以處理

  • 一個 try-catch 結構中只能有一個 try 塊, 但卻可以有多個 catch 塊, 以便匹配不同的異常信息

  • 一般 throw 拋出的異常要和 catch 所捕獲的異常類型所匹配

  • catch 后面的圓括號中, 一般只寫異常信息的類型名, 如 catch (double)

  • 如果 throw 拋出異常信息找不到與之匹配的 catch 塊, 那么系統就會調用一個系統函數 terminate, 使程序終止運行

函數聲明指定異常

我們可以在函數聲明中指定異常情況, 這樣我們在看程序時能夠知道所用的函數是否會拋出異常信息以及異常信息可能的類型. C++ 允許在聲明函數時列出可能拋出的異常類型.

聲明一個不能拋出異常的函數:

double triangle(double,double,double) throw();

聲明一個能拋出異常的函數:

int triangle(int a, int b, int c) throw(runtime_error);

注: 要指定異常類型, 必須在聲明和定義時都指定, 且類型相同.

練習

案例一

防止除數為 0:

#include <iostream>
using namespace std;

template <typename T>
T Div(T x, T y);

int main() {
    // 聲明變量
    int x, y;
    double x1, y1;

    // 賦值
    cout << "Please enter two int:\n";
    cin >> x >> y;
    cout << "Please enter two double:\n";
    cin >> x1 >> y1;

    try {
        // 被檢查的語句
        cout << x << "/" << y << "=" << Div(x, y) << endl;
        cout << x1 << "/" << y1 << "=" << Div(x1, y1) << endl;
    } catch (int) {  // 異常類型
        cerr << "除數為 0, 計算錯誤!" << endl;  // 異常處理數據
    } catch (double ) {  // 異常類型
        cerr << "除數為 0.0, 計算錯誤!" << endl;  // 異常處理數據
    }

    return 0;
}

template <typename T>
T Div(T x, T y) {
    if (y == 0){
        throw y;  // 拋出異常
    }

    return x / y;
}

輸出結果:

Please enter two int:
1 2
Please enter two double:
2 0.0
除數為 0.0, 計算錯誤!
1/2=0
2/0=

案例二

求三角形周長, 防止三邊小于零或組不成三角形.

#include <iostream>

using namespace std;

int triangle(int a, int b, int c);

int main() {
    // 聲明變量
    int a, b, c;

    // 賦值
    cout << "Please enter the three side of the triangle:\n";
    cin >> a >> b >> c;

    try {
        // 被檢查的語句
        cout << "length of the triangle: " << triangle(a, b, c) << endl;
    } catch (const runtime_error &error) {  // 異常類型
        cerr << error.what() << endl;  // 異常處理數據
    }

    return 0;
}

int triangle(int a, int b, int c) {
    if (a <= 0 || b <= 0 || c <= 0) {
        throw runtime_error("The sides of the triangle cannot be less than or equal to zero");
    } else if (a + b <= c || a + c <= b || b + c <= a) {
        throw runtime_error("The lengths of three sides can't form triangle");
    }
    return a + b + c;
}

輸出結果:

C語言或C++中異常處理詳解及其作用介紹

C語言或C++中異常處理詳解及其作用介紹

C語言或C++中異常處理詳解及其作用介紹

到此,相信大家對“C語言或C++中異常處理詳解及其作用介紹”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

AI

介休市| 阜新| 泰州市| 杭锦旗| 德阳市| 通化县| 泗阳县| 苏尼特右旗| 双鸭山市| 年辖:市辖区| 宁安市| 沽源县| 眉山市| 黄梅县| 安新县| 扶绥县| 墨江| 烟台市| 个旧市| 紫云| 辽源市| 湘潭市| 石屏县| 商南县| 叶城县| 镇沅| 屯门区| 崇文区| 冀州市| 微博| 门头沟区| 黄浦区| 盐山县| 新竹县| 南华县| 勐海县| 榕江县| 景德镇市| 安达市| 深泽县| 丹江口市|