一、自定义异常类
#include<iostream>
#include<exception>
#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<RangeException&>(e);
cout << "Vector dimension : " << r.getDimension() << endl;
cout << " I ndex:" << r.getIndex() << endl;
}
}
}
结果如上图所示。
二、相关文件
#pragma once
#include<array>
#include"RangeException.h"
//任务1:创建Vec3D类,用array保存向量成员
//任务3:实现Vec3D::operator[](const int d=index)
//当index越界时,抛出RangeException 的对象
class Vec3D
{
private:
std::array<double, 3> 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<iostream>
#include<exception>
//任务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;
}
};