C++笔记 模板类,异常处理

本文介绍了C++中模板类的使用方法,包括普通类继承模板类和模板类继承模板类的情况,并详细讲解了异常处理机制,如异常的抛出与捕获、异常类的定义与使用等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 模板类

template<class T> class A{
public:
    A(T a){
        this->a = a;
    }
protected:
    T a;
};

普通类继承模板类

class B :public A<int>{
public:
    B(int a,int b):A<int>(a){
        this->b = b;
    }
private:
    int b;
};

调用

void main(){
    B(3,4);
    system("pause");
}

初始化B类一定要先初始化A的构造方法。如果不初始化,如下:
这里写图片描述

模板类继承模板类

template <class T>
class C : public A<T>{
public:
    C(T c, T a) :A<T>(a){
        this->c = c;
    }
protected:
    T c;
};

调用

void main(){
    C<int>a(6,4);
    system("pause");
}

2 异常处理
catch会根据抛出的异常类型,来捕获相应的数据类型。

void main(){
    try{
        int age = 300;
        if (age>200){
            throw 9.3;
        }
    }
    catch(int a){
        cout << "int异常" << endl;
    }
    catch (char* name){
        cout << name << endl;
    }

    catch (...){ //表示未知异常
        cout << "未知异常" << endl;
    }
    system("pause");
}

打印结果

未知异常

异常处理 抛出到方法外

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

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

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

首先异常在mydiv()方法中被抛出,然后在func()中被catch,最终在main方法中被catch。

抛出对象 异常类

class MyException{

};


void mydiv(int a,int b){
    if (b==0){
        throw MyException();
        //throw new MyException;//不要抛出异常指针,不然还要调用delete方法去释放
    }
}

void main(){
    try{
        mydiv(3,0);
    }
    catch (MyException& e){
        cout << "引用类型" << endl;
    }

    catch (MyException* e){
        cout << "指针类型" << endl;
    }
    system("pause");
}

抛出标准异常

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 (NullPointerException& e){
        cout << e.what() << endl;
    }
    catch (...){

    }
    system("pause");

}

打印结果

为空

内部类异常

class Err{
public:
    class MyException{
    public:
        MyException(){

    }
    };
};
void mydiv(int a,int b){
    if (b>10){
        throw Err::MyException();
    }
}
void main(){
    try{
        mydiv(8,20);
    }
    catch (Err::MyException& e){
        cout << "接受到内部类异常"<< endl;
    }
    catch (...){

    }
    system("pause");

}

打印结果

接受到内部类异常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值