C++形状库异常处理
C++ shapes library exception handling
我想写一些"形状库"程序。
不是写很多代码,假设我们只有一个抽象的基类 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
包装每个调用,而且我们也不需要在每次调用函数时检查每个可能的错误。
相关文章:
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- Firebase C++VS2018 SDL2-在Firebase::app::create(..)上执行异常处理
- 使用 stoi 功能进行异常处理
- 子系统中的异常处理:本机
- 与异常处理程序中的操作员<<不匹配
- 数组 C++ 上的异常处理程序
- 异常处理:如果用户输入不是三个特定字符之一
- C++ 异常处理错误输出
- 视觉 std::矢量无异常:警告 C4530:使用了C++异常处理程序,但未启用展开语义.指定 /EHsc
- C++交换机状态异常处理
- 在字符串类上的成员函数和out_of_range异常处理
- 奇怪的消息 (_Base_bitset::_M_do_to_ulong) 从溢出异常处理程序中打印出来
- 执行视觉工作室异常处理模式
- 为什么隐式转换在异常处理中从派生到基?
- C++执行期间的类成员函数错误/异常处理
- C++ 中未处理的异常处理程序
- 用户定义的异常处理
- C :ScopeGuard vs返回支票和异常处理
- 异常处理期间的类型解析