博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++_异常4-将对象用作异常类型
阅读量:7053 次
发布时间:2019-06-28

本文共 2244 字,大约阅读时间需要 7 分钟。

通常,引发异常的函数将传递一个对象。这样做的重要优点之一就是,可以利用不同的异常类型来区分不同的函数在不同的情况下引发的异常

对象可以携带信息,程序员可以根据这些信息来确定异常的原因。

同时,catch块可以根据这些信息来决定采取什么样的措施。

 

下面是针对函数引发的异常而提供的一种设计:

1 class bad_hmean 2 { 3 private: 4     double v1; 5     double v2; 6  7 public: 8     bad_hmean(int a =0, int b=0):v1(a), v2(b) {} 9     void mesg();10 };11 12 inline void bad_hmean::mesg()13 {14     std::cout<<"hmean("<
<<","<
<<"):"15 <<"invalid arguments: a = -b\n";16 17 }

 

可以将bad_hmean对象初始化为传递给含税hmean()的值,而方法mesg()可用于报告问题。

函数hmean()可以使用如下代码:

1 if (a == -b)2     throw bad_hmean(a,b);

上述代码调用构造函数bad_hmean(),以初始化对象,使其存储参数值。

 

接下来看一个新的例子:

添加了一个新的异常类bad_gmean,类bad_gmean中的函数gmean()计算两个数的几何平均值,即乘积的平方根。

1 //exc_exam.h  --  exception classes for hmean(), gmean() 2 #include 
3 4 class bad_hmean() 5 { 6 private: 7 double v1; 8 double v2; 9 10 public:11 bad_hmean(double a=0, double b=0) : v1(a), v2(b){}12 void mesg();13 };14 15 inline void bad_hmean::mesg()16 {17 std::cout<<"hmean("<
<<","<
<<"):"18 <<"invalid arguments:a=-b\n";19 }20 21 class bad_gmean()22 {23 double v1;24 double v2;25 bad_gmean(double a=0, double b=0):v1(a), v2(b){}26 const char * mesg();27 };28 29 30 inline const char * bad_gmean::mesg()31 {32 return "gmean() arguments should be >=0\n";33 }

 

1 //error4.cpp - using exception classes 2 #include 
3 #include
4 #include "exc_mean.h" 5 6 double hmean(double a, double b); 7 double gmean(double a, double b); 8 9 int main()10 {11 using std::cout;12 using std::cin;13 using std::endl;14 15 double x,y,z;16 17 cout<<"Enter two numbers: ";18 while(cin>>x>>y)19 {20 try {21 z = hmean(x,y);22 cout<<"Harmonic mean of"<
<<" and "<
<<" is "<
<
:";27 }28 }29 catch(bad_hmean & bg)30 {31 bg.mesg();32 cout<<"Try again.\n";33 continue;34 }35 catch(bad_gmean & hg)36 {37 bg.mesg();38 cout<<"Value used: "<
<<", "39 <
<

 

bad_hmean()和bad_gmean()使用的技术不一样,

bad_gmean()使用的是公有方法和公有数据,该方法返回一个C-风格字符串;

转载于:https://www.cnblogs.com/grooovvve/p/10435104.html

你可能感兴趣的文章
velocity 判断 变量 是否不是空或empty
查看>>
【leetcode】123. Best Time to Buy and Sell Stock III
查看>>
角色设计的特点
查看>>
sublime text格式化json快捷键
查看>>
获得数据库自动生成的主键
查看>>
磁盘阵列
查看>>
y轴数据变换利器——yaxis-transformer
查看>>
Hibernate缓存机制
查看>>
从头开始复习css之动画
查看>>
sed常见用法,删除匹配行的上2行,下3行
查看>>
【BZOJ】1415 [Noi2005]聪聪和可可 期望DP+记忆化搜索
查看>>
android 7.1 调用相机崩溃解决办法
查看>>
访问控制符
查看>>
Android studio修改字体(font)大小(size)
查看>>
------第二节-----------------第二讲----单链表的基本操作---------
查看>>
iOS 百度地图大头针使用
查看>>
1118: 零起点学算法25——求两点之间的距离
查看>>
delegate代理设计模式
查看>>
花10分钟搞懂开源框架吧 - 【NancyFx.Net】
查看>>
busybox的使用
查看>>