ExampleOne.cpp
上传用户:skywee
上传日期:2021-12-09
资源大小:141k
文件大小:1k
源码类别:

文件格式

开发平台:

C/C++

  1. #include <iostream>
  2. using namespace std;
  3. class CMyError
  4. {
  5. public:
  6. CMyError()
  7. {
  8. ErrCode=0;
  9. strcpy(ErrInfo,"");
  10. cout<<"CMyError()"<<endl;
  11. }
  12. CMyError(int code, char* pinfo)
  13. {
  14.         ErrCode = code;
  15. strcpy(ErrInfo,pinfo);
  16. cout<<"CMyError()"<<endl;
  17. }
  18. CMyError(const CMyError &obj)
  19. {
  20. ErrCode = obj.ErrCode;
  21. strcpy(ErrInfo,obj.ErrInfo);
  22. cout<<"CMyError(const CMyError &obj)"<<endl;
  23. }
  24. ~CMyError()
  25. {
  26. cout<<"~CMyError()"<<endl;
  27. }
  28. virtual void printErrInfo()
  29. {
  30. printf("%sn",ErrInfo);
  31. }
  32. int ErrCode; 
  33. char ErrInfo[50];
  34. };
  35. class CTest
  36. {
  37. public:
  38. int Func(int i)
  39. {
  40. try
  41. {  
  42. if(i<10)
  43. {
  44. CMyError  e(-2,"不能小于10");
  45. throw e;
  46. //throw CMyError(-2, "不能小于10"); //强制类型转换,抛出类类型实例
  47. }
  48. if(i>20)
  49. {
  50. int e;
  51. e = -1;
  52. throw -1; //抛出基本类型数据的实例
  53. }
  54. }
  55. catch(CMyError &e)
  56. {
  57. e.printErrInfo();
  58. throw e;
  59. }
  60. return i;
  61. }
  62. };
  63. int main(int argc, char* argv[])
  64. {
  65. CTest test;
  66. int iIn;
  67. cin>>iIn;
  68. try
  69. {
  70. int x=test.Func(iIn);
  71. cout<<"At the end of try block"<<endl;
  72. }
  73. //也可以是
  74. //catch(CMyError)
  75. //catch(CMyError &e)
  76. //如果抛出来的是堆中分配的对象的指针
  77. //此处也可以接收指针。
  78. catch(CMyError e)
  79. {
  80. cout<<"catch CError object"<<endl;
  81. int b=2;
  82. }
  83. //也可以接收标准数据类型的实例
  84. catch(int i)
  85. {
  86. cout<<"catch int variable:"<<i<<endl;
  87. }
  88. return 0;
  89. }