中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

C ++異常處理:嘗試,捕獲,拋出示例

發(fā)布于:2021-01-28 11:37:51

0

288

0

C ++ 異常處理 try catch

什么是C ++中的異常處理?

C ++中的異常處理為您提供了一種處理意外情況(如運(yùn)行時(shí)錯(cuò)誤)的方法。因此,每當(dāng)發(fā)生意外情況時(shí),程序控制就會(huì)轉(zhuǎn)移到稱為處理程序的特殊功能。

要捕獲異常,請(qǐng)將代碼的某些部分置于異常檢查之下。代碼段位于try-catch塊中。

如果在該代碼段中發(fā)生異常情況,將引發(fā)異常。接下來(lái),異常處理程序?qū)⒔庸艹绦虻目刂啤?/span>

如果沒有異常情況,代碼將正常執(zhí)行。處理程序?qū)⒈缓雎浴?/span>

為什么要進(jìn)行異常處理?

這是在C ++中使用異常處理的原因:

  • 您將把錯(cuò)誤處理代碼與常規(guī)代碼分開。該代碼將更具可讀性,并且易于維護(hù)。

  • 函數(shù)可以處理他們選擇的異常。即使一個(gè)函數(shù)拋出許多異常,它也只會(huì)處理一些異常。調(diào)用方將處理未捕獲的異常。

異常處理關(guān)鍵字

C ++中的異常處理涉及以下三個(gè)關(guān)鍵字:

  • throw-當(dāng)程序遇到問(wèn)題時(shí),它將引發(fā)異常。throw關(guān)鍵字可幫助程序執(zhí)行throw。

  • catch-程序使用異常處理程序來(lái)捕獲異常。它被添加到需要處理該問(wèn)題的程序部分。使用catch關(guān)鍵字即可完成。

  • try -try塊標(biāo)識(shí)將為其激活某些異常的代碼塊。它后面應(yīng)該是一個(gè)/多個(gè)捕獲塊。

假設(shè)代碼塊將引發(fā)異常。異常將被使用try和catch關(guān)鍵字的方法捕獲。try / catch塊應(yīng)包含可能引發(fā)異常的代碼。此類代碼稱為受保護(hù)代碼。

句法:

try / catch采用以下語(yǔ)法:

try {    // the protected code } catch( Exception_Name exception1 ) {    // catch block } catch( Exception_Name exception2 ) {    // catch block } catch( Exception_Name exceptionN ) {    // catch block }
  • 盡管我們有一個(gè)try語(yǔ)句,但是我們可以有很多catch語(yǔ)句。

  • ExceptionName是要捕獲的異常的名稱。

  • exception1,exception2和exceptionN是您定義的用于引用異常的名稱。

范例1:

#include<iostream> #include<vector> using namespace std; int main() { vector<int> vec; vec.push_back(0); vec.push_back(1); // access the third element, which doesn't exist try { vec.at(2); } catch (exception& ex) { cout << "Exception occurred!" << endl; } return 0; }

輸出:

這是代碼的屏幕截圖:

代碼說(shuō)明:

  1. 在程序中包含iostream頭文件以使用其功能。

  2. 將矢量頭文件包含在程序中以使用其功能。

  3. 在程序中將std名稱空間包括在其類中,而不調(diào)用它。

  4. 調(diào)用main()函數(shù)。程序邏輯應(yīng)添加在其主體內(nèi)。

  5. 創(chuàng)建一個(gè)名為vec的向量來(lái)存儲(chǔ)整數(shù)數(shù)據(jù)。

  6. 將元素0添加到名為vec的向量中。

  7. 將元素1添加到名為vec的向量中。

  8. 一條評(píng)論。C ++編譯器將跳過(guò)它。

  9. 使用try語(yǔ)句捕獲異常。{標(biāo)記為try / catch塊主體的開始。正文中添加的代碼將成為受保護(hù)的代碼。

  10. 嘗試訪問(wèn)存儲(chǔ)在名為vec的向量的索引2(第三個(gè)元素)處的元素。該元素不存在。

  11. try / catch塊的主體末端。

  12. 捕獲異常。返回的錯(cuò)誤消息將存儲(chǔ)在變量ex中。

  13. 如果捕獲到異常,請(qǐng)?jiān)诳刂婆_(tái)上打印一些消息。

  14. 捕獲塊的主體末端。

  15. 程序應(yīng)在成功執(zhí)行后返回一個(gè)值。

  16. main()函數(shù)主體的結(jié)尾。

范例2:

#include <iostream> using namespace std; double zeroDivision(int x, int y) { if (y == 0) { throw "Division by Zero!"; } return (x / y); } int main() { int a = 11; int b = 0; double c = 0; try { c = zeroDivision(a, b); cout << c << endl; } catch (const char* message) { cerr << message << endl; } return 0; }

輸出:

這是代碼的屏幕截圖:

代碼說(shuō)明:

  1. 在程序中包含iostream頭文件以使用其功能。

  2. 在程序中將std名稱空間包括在其類中,而不調(diào)用它。

  3. 創(chuàng)建一個(gè)名為zeroDivision的函數(shù),該函數(shù)接受兩個(gè)整數(shù)參數(shù)x和y。該函數(shù)應(yīng)返回一個(gè)雙精度結(jié)果。

  4. 使用if語(yǔ)句檢查變量參數(shù)y的值是否為0。{標(biāo)記if正文的開頭。

  5. 如果y為0,則返回/拋出該消息。

  6. if語(yǔ)句的主體結(jié)尾。

  7. zeroDivision函數(shù)應(yīng)返回x / y的值。

  8. zeroDivision函數(shù)的主體結(jié)尾。

  9. 調(diào)用main()方法。{表示此方法的開始。

  10. 聲明一個(gè)整數(shù)變量并將其賦值為11。

  11. 聲明一個(gè)整數(shù)變量b并將其賦值為0。

  12. 聲明一個(gè)雙精度變量c并將其賦值為0。

  13. 使用try語(yǔ)句捕獲異常。{標(biāo)記為try / catch塊主體的開始。正文中添加的代碼將成為受保護(hù)的代碼。

  14. 調(diào)用zeroDivision函數(shù)并傳遞給參數(shù)a和b,即11和0。此操作的結(jié)果將存儲(chǔ)在變量c中。

  15. 在控制臺(tái)上打印出變量c的值。

  16. try / catch塊的主體末端。

  17. 捕獲異常。返回的錯(cuò)誤消息將存儲(chǔ)在變量消息中。

  18. 在控制臺(tái)上打印出返回的錯(cuò)誤消息。

  19. 捕獲塊的主體末端。

  20. 程序應(yīng)在成功執(zhí)行后返回一個(gè)值。

  21. main()函數(shù)主體的結(jié)尾。

C ++標(biāo)準(zhǔn)異常

C ++帶有在<exception>類中定義的標(biāo)準(zhǔn)異常列表。如下所述:

{xunruicms_img_title}

用戶定義的異常

C ++ std :: exception類允許我們定義可以作為異常拋出的對(duì)象。此類已在<exception>標(biāo)頭中定義。該類為我們提供了一個(gè)名為what的虛擬成員函數(shù)。

該函數(shù)返回char *類型的以空字符結(jié)尾的字符序列。我們可以在派生類中覆蓋它以獲取異常描述。

例:

#include <iostream> #include <exception> using namespace std; class newException : public exception { virtual const char* what() const throw() { return "newException occurred"; } } newex; int main() { try { throw newex; } catch (exception& ex) { cout << ex.what() << 'n'; } return 0; }

輸出:

這是代碼的屏幕截圖:

代碼說(shuō)明:

  1. 在我們的程序中包含iostream頭文件。我們將使用其功能而不會(huì)出錯(cuò)。

  2. 在我們的程序中包括異常頭文件。我們將使用其功能,例如沒有錯(cuò)誤的功能。

  3. 在我們的程序中包含std名稱空間,以使用其類而不調(diào)用它。

  4. 創(chuàng)建一個(gè)名為newException的新類。此類繼承C ++的異常類。

  5. 類主體的開始。

  6. 覆蓋在異常頭文件中定義的虛擬成員函數(shù)what()。然后,我們將描述我們自己的異常,即新異常。

  7. 啟動(dòng)新異常的定義。

  8. 如果捕獲到新的異常,則返回的消息。

  9. 新異常的定義結(jié)束。

  10. 類newException的主體的結(jié)尾。newex是用于捕獲新異常的名稱,此后將調(diào)用newException。

  11. 調(diào)用main()函數(shù)。程序邏輯應(yīng)添加在其主體內(nèi)。{表示其主體的開始。

  12. 使用try語(yǔ)句標(biāo)記需要標(biāo)記異常的代碼。{標(biāo)記為try / catch塊主體的開始。與此相關(guān)的代碼將受到保護(hù)。

  13. 如果發(fā)現(xiàn)newex異常,則將其引發(fā)。

  14. 嘗試結(jié)束。

  15. 使用catch語(yǔ)句捕獲異常。異常錯(cuò)誤消息將存儲(chǔ)在變量ex中。

  16. 在控制臺(tái)上打印異常錯(cuò)誤消息。

  17. catch語(yǔ)句的主體結(jié)尾。

  18. 如果程序成功執(zhí)行,則應(yīng)返回一個(gè)值。

  19. main()函數(shù)主體的結(jié)尾。

概要:

  • 使用C ++中的異常處理,您可以處理運(yùn)行時(shí)錯(cuò)誤。

  • 運(yùn)行時(shí)錯(cuò)誤是程序執(zhí)行期間發(fā)生的錯(cuò)誤。

  • 異常處理可幫助您處理程序中的任何意外情況。

  • 當(dāng)發(fā)生意外情況時(shí),程序控制將轉(zhuǎn)移到處理程序。

  • 要捕獲異常,可以在try-catch塊下放置一段代碼。

  • throw關(guān)鍵字可幫助程序拋出異常,從而幫助程序處理問(wèn)題。

  • try關(guān)鍵字有助于標(biāo)識(shí)將為其激活某些異常的代碼塊。

  • 我們可以覆蓋異常頭文件的what()函數(shù)來(lái)定義我們的異常。