c++异常处理,以前学生阶段在最开始学习c++的时候,感觉真的好陌生,怎么理解都不明白,后来在工作中,再次遇到这种问题,决定写篇博客记录一下;
注意是介绍,以及使用,关于底层怎么实现我并不关心,也没有精力去做这些事情;
记住一点,exception这个类,是所有异常的最根本的来源;
参考:www.cpluscplus.com中关于exception中的介绍以及demo案例;
基本语句块:try....throw...catch,..,finally
有两个练习题,分别使用try..catch,和throw...catch可以练练手,仔细体会一下,就知道是怎么回事儿,以及怎么处理所有的异常。
题目1:https://www.hackerrank.com/challenges/30-exceptions-string-to-integer
1 #include <map> 2 #include <set> 3 #include <list> 4 #include <cmath> 5 #include <ctime> 6 #include <deque> 7 #include <queue> 8 #include <stack> 9 #include <string> 10 #include <bitset> 11 #include <cstdio> 12 #include <limits> 13 #include <vector> 14 #include <climits> 15 #include <cstring> 16 #include <cstdlib> 17 #include <fstream> 18 #include <numeric> 19 #include <sstream> 20 #include <iostream> 21 #include <algorithm> 22 #include <unordered_map> 23 24 using namespace std; 25 26 27 int main(){ 28 string S; 29 cin >> S; 30 int interger = 0; 31 try{ 32 interger = stoi(S); 33 }catch(exception &e){ 34 cout << "Bad String" <<endl; 35 return 0; 36 } 37 cout<< interger; 38 return 0; 39 }
题目2:https://www.hackerrank.com/challenges/30-more-exceptions
1 //Write your code here 2 class Calculator{ 3 public: 4 int power(int n, int p){ 5 int res = 1; 6 if(n < 0 || p < 0){ 7 throw domain_error("n and p should be non-negative"); 8 } 9 else{ 10 while(p){ 11 res *= n; 12 p--; 13 } 14 return res; 15 } 16 } 17 };
注意的地方,在throw xxx_exception的时候,一定要查查xxx_exception的用法,构造函数里面都是怎么定义的,可以传递那些参数,别傻乎乎的想当然;