- 一、自定义异常类
- 二、相关文件
一、自定义异常类
#include#include #include"Vec3D.h" using std::cout; using std::endl; //任务4:在主函数中创建Vec3D对象并调用[]制造越界问题 //捕获异常并输出异常中的信息 int main() { Vec3D v1{ 1.2,3.2,4.3 }; try { cout << v1[4]; } catch (std::exception& e) { cout << "Exception: " << e.what() << endl; if (typeid(e) == typeid(RangeException)) { auto r = dynamic_cast (e); cout << "Vector dimension : " << r.getDimension() << endl; cout << " I ndex:" << r.getIndex() << endl; } } }
结果如上图所示。
#pragma once
#include
#include"RangeException.h"
//任务1:创建Vec3D类,用array保存向量成员
//任务3:实现Vec3D::operator[](const int d=index)
//当index越界时,抛出RangeException 的对象
class Vec3D
{
private:
std::array v{ 1.0,1.0,1.0 };
public:
Vec3D() = default;
Vec3D(double x, double y, double z)
{
v[0] = x;
v[1] = y;
v[2] = z;
}
double& operator[](const int index)
{
if (index >= 0 && index <= 2)
{
return v[index];
}
else
{
throw RangeException(3, index);
}
}
};
#pragma once #include#include //任务2:创建RangeException 类 //定义构造函数 RangeException(std::size_t dimension,const int index) class RangeException:public std::exception { private: std::size_t dimension{ 3 }; int index{ 0 }; public: RangeException(std::size_t dimension, const int index) { this->dimension = dimension; this->index = index; } std::size_t getDimension() { return dimension; } int getIndex() { return index; } };



