exch.cpp
#include <stdexcept>
#include <iostream>
using namespace std;
class bad_hmean:public exception//logic_error我懒得去找logic_error的构造函数格式了,直接继承exception
{
public:
//explicit bad_hmean(const string &what_arg){};
const char *what(){
return "bad argument to heanm(),不应该是相反数";
}
};
class bad_gmean:public exception//logic_error
{
public:
const char *what()
{
return "gmean() arguments should be >=0";
}
};
main152.cpp
#include <iostream>
#include "exch.cpp"
using namespace std;
double hmean(double x,double y)
{
//if(x=-y)别写成了我这样哈
if(x==-y)
throw bad_hmean();
else
return 2.0*x*y/(x+y);
};
double gmean(double x,double y)
{
if(x<0||y<0)
throw bad_gmean();
else
return sqrt(x*y);
};
void main152()
{
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(bad_hmean &h)
{
//h.what();
cout<<h.what()<<endl;
}
catch(bad_gmean &g)
{
cout<<g.what()<<endl;
}
cin.get();
}
cout<<"Bye"<<endl;
cin.get();
}