开发者社区> 黑夜路口> 正文

08.C++异常处理

简介: (创建于2017/12/30) 1.按类型抛出异常 void main(){ try{ int age = 300; if (age > 200){ throw 9.
+关注继续查看

(创建于2017/12/30)

1.按类型抛出异常

void main(){
    try{
        int age = 300;
        if (age > 200){
            throw 9.8;
        }
    }
    catch (int a){
        cout << "int异常" << endl;
    }
    catch (char* b){
        cout << b << endl;
    }
    catch (...){
        cout << "未知异常" << endl;
    }
    system("pause");
}

2.throw 抛出函数外

//throw 抛出函数外
void mydiv(int a, int b){
    if (b == 0){
        throw "除数为零";
    }
}

void func(){
    try{
        mydiv(8, 0);
    }
    catch (char* a){
        throw a;
    }
}

void main(){
    try{
        func();
    }
    catch (char* a){
        cout << a << endl;
    }
    system("pause");
}

3.抛出对象异常类

//抛出对象
//异常类

class MyException{
    
};

void mydiv(int a, int b){
    if (b == 0){
        throw MyException();
        //throw new MyException; //不要抛出异常指针     
    }
}

void main(){
    try{
        mydiv(8,0);
    }
    catch (MyException& e2){
        cout << "MyException引用" << endl;
    }
    //会产生对象的副本
    //catch (MyException e){
    //  cout << "MyException" << endl;
    //}
    catch (MyException* e1){
        cout << "MyException指针" << endl;        
        delete e1;
    }
    
    system("pause");
}

4.throw 声明函数会抛出的异常类型

//throw 声明函数会抛出的异常类型

void mydiv(int a, int b) throw (char*, int) {
    if (b == 0){
        throw "除数为零";   
    }
}

5.标准异常(类似于JavaNullPointerException)和自定义异常

//标准异常(类似于JavaNullPointerException)
class NullPointerException : public exception{
public:
    NullPointerException(char* msg) : exception(msg){

    }
};

void mydiv(int a, int b){
    if (b > 10){
        throw out_of_range("超出范围");     
    }   
    else if (b == NULL){
        throw NullPointerException("为空");
    }
    else if (b == 0){
        throw invalid_argument("参数不合法");
    }
}

void main(){
    try{
        mydiv(8,NULL);
    }
    catch (out_of_range e1){
        cout << e1.what() << endl;
    }
    catch (NullPointerException& e2){
        cout << e2.what() << endl;
    }
    catch (...){

    }

    system("pause");
}

6.外部类异常

//外部类异常
class Err{
public:
    class MyException{
        public:MyException(){

        }
    };
};

void mydiv(int a, int b){
    if (b > 10){
        throw Err::MyException();
    }
    
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C++异常处理的实现
🐰C++异常处理的实现 🌸try的嵌套异常处理语句 🌸异常与函数 🌸异常类
13 0
C++ 和 Java 中的默认虚拟行为有何不同及其异常处理的比较
在 C++ 中,类成员方法默认是非虚拟的。可以使用virtual关键字将它们设为虚拟。例如,Base::show() 在以下程序中是非虚拟的,并且程序打印 “Base::show() called”
22 0
Android C++系列:JNI调用时的异常处理
Native 提供了 ExceptionOccurred 和 ExceptionCheck 方法来检测是否有异常发生,前者返回的是 jthrowable 类型,后者返回的是 jboolean 类型。
23 0
C++之异常处理
C++进阶之异常处理
13 0
C++——异常处理
C++——异常处理
21 0
C++菜鸟学习笔记系列(16)——跳转语句及异常处理
C++菜鸟学习笔记系列(16)——跳转语句及异常处理
91 0
如何用c++实现异常处理
如何用c++实现异常处理
49 0
解析一下C++的异常处理
解析一下C++的异常处理
52 0
C++RTTI(运行时类型识别)与异常处理解析
C++RTTI(运行时类型识别)与异常处理解析
50 0
【C++】C++异常处理知识点总结
【C++】C++异常处理知识点总结
45 0
C++ 异常处理
异常,让一个函数在遇到自己无法处理的问题时可以即时抛出,希望他到调用着直接或者间接的处理该异常。 错误的处理依然是一件很困难的事情,C++的异常机制为程序员提供了一种处理错误的方式,使程序员可以更自然的方式处理错误。
966 0
C++ 异常处理
From : http://www.uml.org.cn/c%2B%2B/201305272.asp From : http://bbs.csdn.net/topics/390269815 From : http://developer.51cto.com/art/201512/502598.htm From : http://www.cnblogs.com/ggjucheng/ar
2774 0
+关注
黑夜路口
安卓高级工程师,目前任职于Wifi万能钥匙
文章
问答
视频
相关电子书
更多
GPON Class C++ SFP OLT Transce
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载