学习C++笔记344

简介: C++ 异常处理

const throw() 不是函数,这个东西叫异常规格说明,表示 what 函数可以抛出异常的类型,类型说明放到 () 里,这里面没有类型,就是声明这个函数不抛出异常,通常函数不写后面的就表示函数可以抛出任何类型的异常。

异常规格说明

1、异常规格说明的目的是为了让函数使用者知道该函数可能抛出的异常有哪些。 可以在函数的声明中列出这个函数可能抛掷的所有异常类型。例如:

void fun()throw(ABCD);

2、若无异常接口声明,则此函数可以抛掷任何类型的异常。

3、不抛掷任何类型异常的函数声明如下:

#include

#include

usingnamespace std;


classMyException

{

public:

   MyException(constchar*message)

       : message_(message)

   {

       cout <<"MyException ..."<< endl;

   }

   MyException(constMyException&other): message_(other.message_)

   {

       cout <<"Copy MyException ..."<< endl;

   }

   virtual~MyException()

   {

       cout <<"~MyException ..."<< endl;

   }


   constchar*what()const

   {

       return message_.c_str();

   }

private:

   string message_;

};


classMyExceptionD:publicMyException

{

public:

   MyExceptionD(constchar*message)

       :MyException(message)

   {

       cout <<"MyExceptionD ..."<< endl;

   }

   MyExceptionD(constMyExceptionD&other)

       :MyException(other)

   {

       cout <<"Copy MyExceptionD ..."<< endl;

   }

   ~MyExceptionD()

   {

       cout <<"~MyExceptionD ..."<< endl;

   }

};


void fun(int n)throw(int,MyException,MyExceptionD)

{

   if(n ==1)

   {

       throw1;

   }

   elseif(n ==2)

   {

       throwMyException("test Exception");

   }

   elseif(n ==3)

   {

       throwMyExceptionD("test ExceptionD");

   }


}


void fun2()throw()

{


}


int main(void)

{

   try

   {

       fun(2);

   }


   catch(int n)

   {

       cout <<"catch int ..."<< endl;

       cout <<"n="<< n << endl;

   }

   catch(MyExceptionD&e)

   {

       cout <<"catch MyExceptionD ..."<< endl;

       cout << e.what()<< endl;

   }

   catch(MyException&e)

   {

       cout <<"catch MyException ..."<< endl;

       cout << e.what()<< endl;

   }


   return0;

}

目录
相关文章
|
1天前
|
算法 数据处理 C++
|
22小时前
|
C++
C++基础知识(四:类的学习)
类指的就是对同一类对象,把所有的属性都封装起来,你也可以把类看成一个高级版的结构体。
|
1天前
|
存储 调度 C++
|
1天前
|
存储 安全 C++
|
1天前
|
C++ 索引 容器
|
5天前
|
C++
【C++】日期类Date(详解)②
- `-=`通过复用`+=`实现,`Date operator-(int day)`则通过创建副本并调用`-=`。 - 前置`++`和后置`++`同样使用重载,类似地,前置`--`和后置`--`也复用了`+=`和`-=1`。 - 比较运算符重载如`&gt;`, `==`, `&lt;`, `&lt;=`, `!=`,通常只需实现两个,其他可通过复合逻辑得出。 - `Date`减`Date`返回天数,通过迭代较小日期直到与较大日期相等,记录步数和符号。 ``` 这是236个字符的摘要,符合240字符以内的要求,涵盖了日期类中运算符重载的主要实现。
|
8天前
|
C++
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
11 0
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
|
2天前
|
编译器 C语言 C++