异常的类层次结构
虚拟函数
#include <iostream>
#include <string>
using namespace std;
class BaseExc{
public:
virtual void message()
{
cout<<"BaseExc"<<endl;
}
};
class DevidedExc:public BaseExc{
public:
void message()
{
cout<<"DevidedExc"<<endl;
}
};
class DevidedDevidedExc:public DevidedExc{
public:
void message()
{
cout<<"DevidedDevidedExc"<<endl;
}
};
void Throw(int num)
{
if(num==0)
throw BaseExc();//抛出异常,这里不能是throw new BaseExc;也不能是throw BaseExc;表达式是一个构造函数的调用。 if(num==1)
throw DevidedExc();
if(num==2)
throw DevidedDevidedExc();}
int main(int argc,char* argv[])
{
try{
char ch=cin.get();
int j=atoi(&ch);
if(j<0||j>2)
return 1;
Throw(j);
}
catch(
BaseExc &e){//这里要是指针或者引用。如果是单纯的对象,那么输出只能是BaseExc
e.message();
}
}
输入0 BaseExc
输入1 DevidedExc
输入2 DevidedDevidedExc
//派生类的catch子句必须先出现。这确保了只有在没有其他catch子句的时候,才会进入基类的catch子句。
int main(int argc,char* argv[])
{
try{
char ch=cin.get();
int j=atoi(&ch);
if(j<0||j>2)
return 1;
Throw(j);
}
catch(DevidedDevidedExc &e)
{
e.message();
}
catch(DevidedExc &e)
{
e.message();
}
catch(BaseExc &e){
e.message();
}
}