C++中的错误处理,构造函数与常规方法

Den*_*hie 5 c++

我有一个cheesesales.txtCSV文件,包含我最近的所有奶酪销售.我想创建一个CheeseSales可以执行以下操作的类:

CheeseSales sales("cheesesales.txt"); //has no default constructor
cout << sales.totalSales() << endl;
sales.outputPieChart("piechart.pdf");
Run Code Online (Sandbox Code Playgroud)

上面的代码假定不会发生任何故障.实际上,失败将会发生.在这种情况下,可能会发生两种故障:

  • 构造函数失败:文件可能不存在,可能没有读取权限,包含无效/不可解析的数据等.
  • 常规方法失败:文件可能已经存在,可能没有写访问权限,可用于创建饼图的销售数据太少等.

我的问题很简单:您如何设计此代码来处理故障?

一个想法:bool从常规方法返回a 表示失败.不知道如何处理构造函数.

经验丰富的C++程序员如何做这些事情?

小智 4

在C++中,异常是报告错误的方式。顺便说一句,可以处理初始化列表中的异常。

函数 try 块将处理程序 seq 与构造函数初始化程序(如果存在)和函数体相关联。在构造函数初始化程序中执行初始化表达式期间或在执行函数体期间抛出的异常会将控制权转移到函数 try 块中的处理程序,其方式与在执行 try 期间抛出的异常相同-block 将控制权转移给其他处理程序。

好的代码通常应该在最上层(线程)级别使用最少的 try/catch 块。最好只有一个。这样,知道“一切都会抛出”,您就不必过多考虑错误,并且您的正常场景代码流程看起来很干净。