我想写一些"形状库"程序
不要编写很多代码,让我们说我们只有一个抽象的基类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块中包装几乎每一行更好的解决方案?
很抱歉打扰,只是想了解它是如何工作的。
答案 0 :(得分:1)
不要为琐碎的失败抛出异常,这些异常并非例外,但预计将作为使用对象的常规功能发生。
在哪里划线是一个判断问题。我们中的一些人还在学习它!
如果内存不足,则在创建对象时会正确引发异常,因为将来的所有分配也可能会失败。但是,当一个对象根本不在屏幕区域中时,您可能无法显示它。
需要在为真正异常的错误(本地不可恢复的)抛出异常和作为预期行为的一部分而且可以立即从中恢复的常规失败之间取得平衡。
这样您就不会以try/catch
结束每次通话,但我们也不需要在每次调用函数时检查每个可能的错误。