65 C++ - 自定义异常

简介: 65 C++ - 自定义异常

① 标准库中的异常是有限的;

② 在自己的异常类中,可以添加自己的信息。(标准库中的异常类值允许设置一个用来描述异常的字符串)。

如何编写自己的异常类?

① 建议自己的异常类要继承标准异常类。因为C++中可以抛出任何类型的异常,所以我们的异常类可以不继承自标准异常,但是这样可能会导致程序混乱,尤其是当我们多人协同开发时。

② 当继承标准异常类时,应该重载父类的what函数和虚析构函数

③ 因为栈展开的过程中,要复制异常类型,那么要根据你在类中添加的成员考虑是否提供自己的复制构造函数。

//自定义异常类
class MyOutOfRange:public exception
{
public:
  MyOutOfRange(const string  errorInfo)
  {
    this->m_Error = errorInfo;
  }
  MyOutOfRange(const char * errorInfo)
  {
    this->m_Error = string( errorInfo);
  }
  virtual  ~MyOutOfRange()
  {
  }
  virtual const char *  what() const
  {
    return this->m_Error.c_str() ;
  }
  string m_Error;
};
class Person
{
public:
  Person(int age)
  {
    if (age <= 0 || age > 150)
    {
      //抛出异常 越界
      //cout << "越界" << endl;
      //throw  out_of_range("年龄必须在0~150之间");
      //throw length_error("长度异常");
      throw MyOutOfRange(("我的异常 年龄必须在0~150之间"));
    }
    else
    {
      this->m_Age = age;
    }
  }
  int m_Age;
};
void test01()
{
  try
  {
    Person p(151);
  }
  catch ( out_of_range & e )
  {
    cout << e.what() << endl;
  }
  catch (length_error & e)
  {
    cout << e.what() << endl;
  }
  catch (MyOutOfRange e)
  {
    cout << e.what() << endl;
  }
}


目录
相关文章
|
6月前
|
C语言 C++
C/C++ 自定义头文件,及头文件结构详解
还是从"stdio.h"说起,这是C语言中内置的标准库,也就是说,头文件很多时候其实就是一个“库”,类似于代码的仓库,也就是说将某些具有特定功能的常量、宏、函数等归为一个大类,然后放进这个“仓库”,就像stdio.h就是一个标准输入/输出的头文件
196 1
|
6月前
|
存储 算法 数据库
【C++ 软件设计思路】学习C++中如何生成唯一标识符:从UUID到自定义规则
【C++ 软件设计思路】学习C++中如何生成唯一标识符:从UUID到自定义规则
334 0
|
6月前
|
存储 算法 C语言
【C++ 迭代器实现 终篇】深入理解C++自定义容器和迭代器的实现与应用
【C++ 迭代器实现 终篇】深入理解C++自定义容器和迭代器的实现与应用
220 0
|
3月前
|
C++
C++ PCL 沿着自定义的平面做横截面(直通滤波)
C++ PCL 沿着自定义的平面做横截面(直通滤波)
43 0
|
6月前
|
SQL 安全 程序员
C++:异常
C++:异常
54 7
|
6月前
|
小程序 编译器 Linux
C++ 异常原理:以一个小程序为例
作者在调查某个 bug 时涉及到 C++ 异常,借此机会以本文把 C++ 异常机制梳理清楚供大家参考。
|
6月前
|
安全 Java 程序员
【C++】异常 -- 详解
【C++】异常 -- 详解
|
4月前
|
C++
C++ 异常机制问题之捕获异常的问题如何解决
C++ 异常机制问题之捕获异常的问题如何解决
|
3月前
|
C++ 容器
C++中自定义结构体或类作为关联容器的键
C++中自定义结构体或类作为关联容器的键
39 0
|
4月前
|
安全 Java 程序员
【C++11】异常知多少
【C++11】异常知多少
39 7