旅途

如果想飞得高,就该把地平线忘掉

异常 重点 层次 虚拟

异常的类层次结构

虚拟函数
#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();   
    }

}

posted on 2007-09-29 00:29 旅途 阅读(73) 评论(0)  编辑 收藏 引用 所属分类: C/C++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理