//8.1给三角形的三边a,b,c,求三角形的面积。只有a+b>c,b+c>a,a+c>b时才能构成三角形
//设置异常处理,对不符合三角形条件的输出警告信息;不予计算。
#include <iostream>
#include <cmath>
using namespace std;
/* int main()//没有异常处理的程序
{
double triangle(double,double,double);
double a,b,c;
cin>>a>>b>>c;
while(a>0&&b>0&&c>0)
{
cout<<triangle(a,b,c)<<endl;
cin>>a>>b>>c;
}
return 0;
}
double triangle(double a,double b,double c)
{
double area;
double s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
return area;
}*/
void main()
{
double triangle(double,double,double);
double a,b,c;
cin>>a>>b>>c;
try
{
while(a>0&&b>0&&c>0)
{
cout<<triangle(a,b,c)<<endl;
cin>>a>>b>>c;
}
}
catch(double)
{
cout<<"a="<<a<<",b="<<b<<",c="<<c<<",that is not a triangle!"<<endl;
}
cout<<"end"<<endl;
}
double triangle(double a,double b,double c)
{
double area;
double s=(a+b+c)/2;
if(a+b<=c||b+c<=a||c+a<=b)
throw a;
area=sqrt(s*(s-a)*(s-b)*(s-c));
return area;
}
//8.2在函数嵌套的情况下检测异常处理
#include <iostream>
using namespace std;
int main()
{
void f1();
try
{f1();}
catch(double)
{ cout<<"OK0!"<<endl;}
cout<<"end0"<<endl;
return 0;
}
void f1()
{
void f2();
try
{f2();}
catch(char)
{cout<<"OK1"<<endl;}
cout<<"end1"<<endl;
}
void f2()
{
void f3();
try
{
f3();
}
catch(int)
{ cout<<"OK2"<<endl;}
cout<<"end2"<<endl;
}
void f3()
{
double a=0;
try
{throw a;}
catch(float)
{cout<<"OK3!"<<endl;}
cout<<"end3"<<endl;
}
//8.3在异常处理中处理析构函数
#include <iostream>
#include <string>//不能用<cstring>
using namespace std;
class Student
{
public:
Student(int n,string nam)
{
cout<<"constructor-"<<n<<endl;
num=n;
name=nam;
}
~Student (){cout<<"destructor-"<<num<<endl;}
void get_data();
private:
int num;
string name;
};
void Student::get_data()
{
if(num==0)
throw num;
else
cout<<num<<" "<<name<<endl;
cout<<"in get_data()"<<endl;
}
void fun()
{
Student stud1(1011,"Tan");
stud1.get_data();
Student stud2(0,"Li");
stud2.get_data();
}
int main()
{
cout<<"main begin:"<<endl;
cout<<"call fun();"<<endl;
try
{
fun();
}
catch(int n)
{
cout<<"num="<<n<<",error!"<<endl;
}
cout<<"main end!"<<endl;
return 0;
}