C++形状库异常处理

C++ shapes library exception handling

本文关键字:异常处理 C++      更新时间:2023-10-16

我想写一些"形状库"程序。

不是写很多代码,假设我们只有一个抽象的基类 Shape 和一些派生类,例如 Line、Rectangle 和 Circle(我认为描述它们并不那么重要)。

考虑到主要功能将是这样的:

int main() {
    Shape *rect = new Rectangle(Pixel(25, 10), Pixel(33, 15));
    Shape *line = new Line(Pixel(1, 12), Pixel(23, 12));
    Shape *circle = new Circle(Pixel(37, 12), 2);
    refresh_shapes(); // just draw every created shape
    cin.get();
    rect->rotate_left();
    refresh_shapes();
    cin.get();
    rect->move(45, 12);
    refresh_shapes();
    cin.get();
    line->up(rect); // place the line right above the rect
    refresh_shapes();
    cin.get();
    circle->down();
    refresh_shapes();
    cin.get();
    return 0;
}

我应该如何处理可能在构造函数中或移动后引发的异常(如果形状超出屏幕范围)?

例如,如果我将整个代码包装在一个 try-catch 块中,我将在屏幕上看到引发异常之前发生的所有事情。但我想尽可能多地"保存"。有没有比将几乎每一行都包装在 try-catch 块中更好的解决方案?

很抱歉打扰,只是想了解它是如何工作的。

不要为非异常但预期作为使用对象的常规功能发生的琐碎故障引发异常。

在哪里划清界限是一个判断问题。我们中的一些人仍在学习它!

创建对象时,如果内存不足,则会正确引发异常,因为所有未来的分配也可能失败。但是,当对象根本不位于屏幕区域中时,您可能根本无法显示它。

需要在真正异常

错误(本地不可恢复)的引发异常与常规故障之间取得平衡,这些错误是预期行为的一部分,并且可以立即从中恢复。

这样你就不会用try/catch包装每个调用,而且我们也不需要在每次调用函数时检查每个可能的错误。