3

我开始使用 C++ 编写一些代码,并且我从一个简单的任务管理器程序中获得了这个简单的类方法,我正在编写一个实验:

void Task::setText(string text)
{
    if(text.length() > MIN_LENGTH)
    {
        this->text = text;
    }
}

如您所见,如果类text属性的长度大于MIN_LENGHT我显示的代码上方定义的变量,则此方法将类属性设置为传递给该方法的属性。因此,如果传递给方法的字符串的条件不为真,我必须做一些事情。

在我买的 C++ 书中,没有解释错误处理,而是assert到处使用。由于断言只是在表达式为假时中止程序,这旨在作为输入验证,所以我寻找了一种更好的方法。

这个搜索让我找到了C++ exceptions。它解释了如何通过创建一个继承自exception.

良好的 OOP 实践表明每个类都应该独立于程序中的其他类。那么我应该把我创建的这个异常类放在哪里呢?在同一个标​​题中,我定义了我的 Task 类?还是应该task.cpp在我定义类的每个方法的地方?

也许这是一个愚蠢的问题,但只是想从一开始就确保安全并遵循良好的软件架构实践。

4

3 回答 3

6

建议#1:你需要完整地阅读你的书。

如果发生每个错误,您都应该抛出异常,这是不正确的。异常应该比每 1000 次调用您的函数/方法时发生的频率低。1000 在这里不是一个神奇的值,特别是其他数字可能是合适的。

换句话说。您需要回答的第一个问题:此错误发生的频率。如果这可能经常发生,那么返回值(bool 或 enum 或 int)是更好的方法。

如果您决定使用异常,最好从std::exception. 您应该将项目的例外情况放在单独的文件中。考虑几节课,也许是 3-10 节课。最好在您的异常类中放置一个数据字段来解释发生的事情的详细信息,而不是创建数百个不同的异常类。

于 2012-10-05T22:20:29.303 回答
1

异常类可以在单独的 .h .cpp 文件中。这样你就可以重用其他东西。

作为我自己的经验法则:

断言适用于不应该发生的事情,但我们检查只是为了确保 100% 确定

异常用于处理程序在生产时可能发生的错误

于 2012-10-05T22:20:21.540 回答
0

C++ 标准库提供了许多您可以使用的异常类。首先,您可以使用它们。在您的情况下,适用的似乎是range error
如果你仍然想实现你自己的异常类,你在哪里声明和实现它应该取决于他们的代码。如果它们针对特定于类的错误进行编码,则可以将它们放入类文件中。如果您必须从多个文件中使用它们,请将它们放在它们自己的 .cpp/.hpp 对中。

于 2012-10-05T22:20:08.437 回答