C++程序示例,展示异常处理

1. 异常处理概述

在编写程序时,我们通常都希望它能够正确地执行,但实际中总会出现一些错误或者异常情况,如文件未找到、内存不足等。这些情况如果不加以处理会导致程序崩溃,而异常处理就是一种解决这些问题的机制。

异常处理是指程序在发生异常情况时,能够捕获并处理这些异常,使程序继续执行下去。

C++中的异常处理机制主要包含三个关键字:try、catch、throw。

try:用于捕获可能会导致异常的代码块。

catch:用于捕获异常,并处理异常。

throw:用于抛出异常。

2. 异常处理示例

2.1 try-catch语句

下面是一个示例程序,演示了如何使用try-catch语句来处理异常:

#include <iostream>

using namespace std;

int main()

{

int a = 10, b = 0;

try

{

if (b == 0)

{

throw "除数为0";

}

cout << a / b << endl;

}

catch (const char* errMsg)

{

cerr << "错误信息:" << errMsg << endl;

}

return 0;

}

在上面的示例程序中,我们使用try-catch语句来处理除数为0的异常。当b=0时,会抛出一个类型为const char*的异常,并在catch语句中捕获并输出错误信息。

值得注意的是,在上面的示例程序中,我们使用了const char*类型的异常。这是因为在C++中,异常可以是任何类型,但通常情况下我们使用基本数据类型或自定义的类类型作为异常。

2.2 自定义异常类

除了使用基本数据类型作为异常,我们还可以自定义异常类。下面是一个自定义异常类的示例程序:

#include <iostream>

#include <string>

using namespace std;

class Exception

{

public:

Exception(const string& message) : m_message(message) {}

const string& getMessage() const { return m_message; }

private:

string m_message;

};

int main()

{

int a = 10, b = 0;

try

{

if (b == 0)

{

throw Exception("除数为0");

}

cout << a / b << endl;

}

catch (const Exception& e)

{

cerr << "错误信息:" << e.getMessage() << endl;

}

return 0;

}

在上面的示例程序中,我们定义了一个名为Exception的异常类,它包含一个构造函数和一个getMessage()函数。在throw语句中,我们抛出一个类型为Exception的异常,而在catch语句中,我们捕获并输出了异常信息。

3. 异常的层次结构

在C++中,异常是一个类层次结构。最基础的异常是std::exception,它定义在<exception>头文件中。其他异常类都继承自std::exception,如std::runtime_error、std::logic_error等。

这些异常类可以帮助我们更方便地处理异常情况,例如:

std::runtime_error:表示发生了一些运行时错误,例如数组下标越界、找不到文件等。

std::logic_error:表示发生了一些逻辑错误,例如除数为0、指针为空等。

std::bad_alloc:表示内存分配失败。

3.1 使用标准异常类

下面是一个使用标准异常类的示例程序:

#include <iostream>

#include <stdexcept>

using namespace std;

int main()

{

int a = 10, b = 0;

try

{

if (b == 0)

{

throw logic_error("除数为0");

}

cout << a / b << endl;

}

catch (const exception& e)

{

cerr << "错误信息:" << e.what() << endl;

}

return 0;

}

在上面的示例程序中,我们使用了std::logic_error异常来处理除数为0的情况。在throw语句中,我们抛出了一个类型为logic_error的异常,并将除数为0作为错误信息。在catch语句中,我们捕获并输出了异常的what()函数返回值,它返回了异常的错误信息。

4. 总结

异常处理是一种解决程序中异常情况的机制,可以使程序在遇到异常时不会崩溃。在C++中,异常处理主要使用try-catch语句、throw语句来实现。我们可以使用基本数据类型或自定义的类类型来作为异常,也可以使用标准异常类来处理异常情况。

需要注意的是,在使用异常处理时,我们应该遵守以下原则:

捕获到异常后应该及时处理,防止继续向上抛出,导致程序崩溃。

不要滥用异常处理机制,应该根据实际情况合理使用,避免程序性能下降。

在定义自定义异常类时,应该尽量使其简单明了,可以提供一个输出错误信息的接口,方便程序调试。

后端开发标签