exch.cpp
#include <stdexcept>
#include <iostream>
using namespace std;
class base//:public exception
{
private:
double x;
double y;
public:
explicit base(double a,double b):x(a),y(b){};
virtual void show()const
{
cout<<x<<" and "<<y<<" ";
}
};
class bad_hmean:public base
{;
public:
explicit bad_hmean(double a,double b):base(a,b)
{};
virtual void show()const
{
base::show();
cout<<"should not be x=-y "<<endl;
}
};
class bad_gmean:public base
{
public:
explicit bad_gmean(double a,double b):base(a,b){};
virtual void show()const
{
base::show();
cout<<"should be >=0"<<endl;
}
};
main153.cpp
#include <iostream>
#include "exch.cpp"
using namespace std;
double hmean(double x,double y)
{
//if(x=-y)别写成了我这样哈
if(x==-y)
throw bad_hmean(x,y);
else
return 2.0*x*y/(x+y);
};
double gmean(double x,double y)
{
if(x<0||y<0)
throw bad_gmean(x,y);
else
return sqrt(x*y);
};
void main153()
{
double x,y,z;
cout<<"Enter two numbers:";
while(cin>>x>>y)
{
try{
z=hmean(x,y);
cout<<"Harmonic mean of "<<x<<" and "<<y
<<" is "<<z<<endl;
cout<<"Geometric mean of "<<x<<" and "<<y
<<" is "<<gmean(x,y)<<endl;
cout<<"Enter the next set of numbers <q to quit>:";
}
catch(base &b)
{
b.show();
//h.what();
//cout<<h.what()<<endl;
}
/*
catch(bad_hmean &h)//会在这里捕获
{
h.show();
}*/
catch(bad_gmean &g)
{
g.show();
//cout<<g.what()<<endl;
}
cin.get();
}
cout<<"Bye"<<endl;
cin.get();
}