当在程序中遇到错误或异常情况时,我们可以使用 throw
语句来抛出异常。 throw
语句由 throw
关键字和要抛出的值组成,其基本语法如下:
throw expression;
expression
可以是任意表达式,其返回值将作为异常信息输出。
下面我们来详细讲解 throw
的一些用法:
1. 抛出预定义异常
在 C++ 中,标准库定义了一些常见的异常类型,包括整型和字符串异常。我们可以使用这些类型抛出异常,即使用 throw
关键字后直接跟标准库定义的异常类型。下面是一些常见的异常类型以及它们的定义:
std::exception
:所有标准异常类的基类std::runtime_error
:表示运行时错误std::logic_error
:表示逻辑错误std::out_of_range
:表示访问超出范围的元素std::bad_alloc
:表示内存分配失败
下面是一个简单的示例:
#include <iostream>
#include <stdexcept>
using namespace std;
int main() {
int age;
cout << "请输入你的年龄:";
cin >> age;
if (age < 0) {
throw runtime_error("年龄不能为负数!");
}
cout << "你的年龄是:" << age << endl;
return 0;
}
该程序可以判断输入的年龄是否为负数,如果是,则抛出 runtime_error
类型的异常,同时输出异常信息。
2. 自定义异常类
我们也可以自定义一个类来作为异常类型,以更好地描述异常信息。定义一个异常类时,该类需要继承自 std::exception
类,同时可以加入一些自定义成员变量和成员函数来扩展异常类的功能。
下面是一个自定义异常类的示例:
#include <iostream>
#include <exception>
#include <string>
using namespace std;
class MyException: public exception
{
public:
MyException(const char* msg, int errorCode): m_errorCode(errorCode)
{
m_errorMsg = new char[strlen(msg) + 1];
strcpy(m_errorMsg, msg);
}
virtual ~MyException() throw()
{
delete [] m_errorMsg;
}
virtual const char* what() const throw()
{
return m_errorMsg;
}
int getErrorCode() const
{
return m_errorCode;
}
private:
char* m_errorMsg;
int m_errorCode;
};
int main() {
int age;
cout << "请输入你的年龄:";
cin >> age;
try {
if (age < 0) {
throw MyException("年龄不能为负数!", 1001);
}
cout << "你的年龄是:" << age << endl;
} catch (const MyException& e) {
cout << "异常编号:" << e.getErrorCode() << endl;
cout << "异常信息:" << e.what() << endl;
}
return 0;
}
该程序自定义了一个 MyException
异常类,通过继承 std::exception
类来扩展异常类的功能。异常类中包含了一些自定义成员变量和成员函数,以便更好地描述异常信息。在 main
函数中,如果输入的年龄小于 0,则抛出自定义异常类型,并且输出异常信息及异常编号。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:throw的一些用法 - Python技术站