问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c++怎么自定义异常

发布网友 发布时间:2022-04-22 22:11

我来回答

3个回答

热心网友 时间:2023-08-04 13:43

1.C++程序中处理异常或者错误,可以使用异常机制,异常处理的结构为:

try

{

//可能引发异常的代码

}

catch( type e)

{

//异常处理

}

catch(…) //省略号代表可以接受任何类型的异常

{

//

}

C++抛出的异常可以int、doble、类等类型,抛出的异常要进行处理,否则会自动调用abort()函数终止程序。C++提供了了一些标准的异常类,exception类可以派生出bad_cast,runtime_error,bad_alloc,logic_error这些异常类。使用C++提供的标准异常类,程序员还可以自定义异常类。自定义异常类,需要定义标准异常的派生类,在派生类中初始化基类的构造函数。抛出、捕获自定义异常类的方法与标准异常类相同。下面是自定义异常类的代码:
# include <iostream>
using namespace std;
class myerror:public std::logic_error //从logic_error派生自定义异常类
{
public:
myerror(const std::string &s):std::logic_error(s){}
virtual ~myerror() throw(){}
};
class Sale
{
public:
Sale(int i):x(i){}
void cmp();
private:
int x;
};
void Sale::cmp()
{
try{
if (x>5)
throw myerror("number out of range"); //抛出异常
else
cout<<x<<endl;
}
catch (myerror &) //捕获异常
{
cout<<"out of range"<<endl;
}
}
int main()
{
Sale s(13);
s.cmp();
cin.get();
return 0;
}
上面的myerror类在定义析构函数时,后面加了throw(),这是函数的异常说明。throw后面的括号表明可以抛出的异常类型,如果不抛出任何异常,括号内为空。这个析构函数不抛出任何异常。如果函数指明不抛出任何异常,但函数体内却抛出异常,这是程序会调用terminate函数终止程序。如果基类中存在虚函数,虚函数抛出某种异常,派生类的虚函数版本也可以抛出此类异常或者不抛出任何异常,但不能抛出任何其它异常,就是说,派生类的虚函数抛出的异常要比基类更加严格。

热心网友 时间:2023-08-04 13:44

C++中的catch只检查所捕获的异常的信息的类型.而不检查他们的值.异常信息可以使c++系统中预定义的标准类型.也可以是自己定义的类型.如果由throw抛出的信息属于该类型,或者是他的子类.则catch与throw二者匹配.catch捕获该异常信息.此种的表现形式为catch(type) type为任意类型.也可以有catch(type t),此种除了能得到抛出时的异常信息,还可以得到抛出异常时该类型的值.还有catch(...),此种捕获所有异常信息.所有在c++中不像java或其他语言一样需要自定义异常类并继承其异常基类.

热心网友 时间:2023-08-04 13:44

//: Except.cpp
// Basic exceptions
// Exception specifications & unexpected()
#include <exception>
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;

class Up {};
class Fit {};
void g();

void f(int i) throw (Up, Fit) {
switch(i) {
case 1: throw Up();
case 2: throw Fit();
}
g();
}

// void g() {} // Version 1
void g() { throw 47; } // Version 2
// (Can throw built-in types)

void my_unexpected() {
cout << "unexpected exception thrown";
exit(1);
}

int main() {
set_unexpected(my_unexpected);
// (ignores return value)
for(int i = 1; i <=3; i++)
try {
f(i);
} catch(Up) {
cout << "Up caught" << endl;
} catch(Fit) {
cout << "Fit caught" << endl;
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
儿歌祖国妈妈我爱你是谁写的汇总28句 为什么有的人学几何很厉害数学却不行 一个人数学几何好,但是其他计算方面的都马马虎虎,那么说明这个人怎么... 数学几何好的人,就是一道几何题很快就能想出来的人是不很聪明?这能练... 固安尚城国际怎么样 驾驶员咨询服务营业执照经营范围怎么写 驾校属于什么经营范围 核桃粉保质期多长时间 亿生康宝筋骨冷敷凝胶只在国内销售吗? 清河镇概况 java中如何创建自定义异常? 在JAVA中,用户程序如何自定义异常? 如何在C#中自定义异 python如何自定义异常? 如果汽车在行驶中踩了刹车,半轴还在转动吗?哪个传过来的动力 消失在哪里了呢 滴滴为什么下载不了了? 今年升初中(番禺仲元实验学校),要寄宿,需要带些什么?越详细越好! 给下列汉字加上不同的偏旁组成新字,再组词 ;已 嵊泗岛好还是枸杞岛好 工行网上贵金属交易时间是什么时候? 工商银行账户贵金属指数的交易时间是什么时候? 工行个人网上银行账户贵金属的交易时间是怎样规定的? 建行贵金属交易时间是? 民生银行账户贵金属交易的交易时间是什么? 炒黄金交易时间是几点到几点? 贵金属最佳交易时间段是什么时候? 国际黄金交易时间是连续的吗? 账户贵金属交易时间是几点到几点? 现货黄金几点开盘? 工商银行账户贵金属的交易时间是什么时候? 如何创建一个自定义异常? java中如何使用自定义异常? 在JAVA中如何创建一个自定义异常? java 如何自定义异常 用代码展示 真心靠谱 如何自定义java中的异常类 如何编写java中的自定义异常类 如何自定义一个异常类 JAVA 自定义异常是怎么使用的? java如何自定义一个可捕获的异常 如何在java中创建一个“自定义异常类”? java如何自定义异常用代码 什么是异常?如何实现定义异常。 Java自定义异常类 鏉彐缃戝晚鍌诲瓙怎么读? 面对复杂的图片背景水印怎么去除啊,最好有详细的步骤? 背景很复杂,如何用PS去水印 如可用PS解决在复杂的背景中去除水印? 背景颜色复杂的图片如何去除水印? PS如何去除复杂背景的淡水印? 怎么用ps去复杂图片上的水印