C++异常机制的初识

来源:互联网 发布:城市新闻网络交换平台 编辑:程序博客网 时间:2024/06/18 09:30

1. typeid 的使用

      回顾:sizeof 关键字,用来计算数据类型在内存中的占用的空间的大小
                 int i= 10;

                 sizeof(int) = sizeof(i) = 4;
                表达式的结果是整数;
      typeid 关键字,用来获取数据类型的名字  
//添加头文件#include<typeinfo>
      typeid(int) = typeid(i)  结果是一样的 
      返回值是typeinfo类型的对象,在该对象上调用成员函数name()获取类型的名字,返回值类型是C风格的字符串类型
      typeinfo 类型的对象支持判断运算符(==)      
    注意:
          只有在具有多态关系的父子类之间,才能通过typeid正确的判断一个指针实际指向的对象类型

2. dynamic_cast  的使用

   格式:
       目标类型 变量名 = dynamic_cast<目标类型>(源类型);
   功能:
       一般用于在具有多态继承关系的父子类之间,主要用于父类到子类的转换
   static_cast  在源类型和目标类型之间只要有一个方向可以发生隐式类型转换,那么在两个方向上都可以做静态类型转换,
   反之,如果在两个方向上都不能做隐式类型转换,那么在两个方向上都不能做静态类型转换
   const_cast       用于去除指针/引用 上面的常属性
   reinterpret_cast 用于任意指针类型之间的转换,以及指针和整型之间的转换

3. 异常

   3.1 异常的语法格式

        (1)异常的捕获
       try
       {
         可能引发异常的语句;(比如函数的调用)
       }
       catch(异常类型 变量名)
       {
         异常处理语句;
       }
       catch(异常类型2 变量名2)
       {
         异常处理语句;
       }.........
       catch(...)
       {
          异常处理语句;
       }
    (2)异常抛出
       throw  异常类型; 

   3.2 异常的基本用法

     (1)抛出简单类型变量,使用异常变量的值来区分不同的异常(比如 int类型)
     (2)抛出类类型对象,那么通过异常类型来区分不同的异常(如自定义不同的异常类)
     (3)从标准异常类继承
     exception 是标准异常类的基类

     /usr/include/c++/4.6/exception 文件中
     virtual/*虚函数 */ const char*/*返回值类型*/what() const/*常函数*/throw()/*异常说明,表示不抛出任何异常*/;
     (4)继续抛出异常
        a.发生异常之后可以不处理,继续向上抛
        b.只能处理一部分,处理完毕之后继续throw
        如:
           try
           {
            //
           }
           catch(exception& ex)
           {
            //throw ex;
            //....
            throw ex;
           }
     (5)异常说明
        返回值类型 函数名(形参表) throw(异常类型1,异常类型2,....){}
        告诉编译器可能会抛出的异常
0 0
原创粉丝点击