嘀嘀咕

Posted engineerzhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嘀嘀咕相关的知识,希望对你有一定的参考价值。

目录

1.异常

void divide(int a, int b)
{
     if(b == 0)
           throw b;
}

void callDivid(int a, int b)
{
     divide(a,b);
}

int main( ){
     
     //尝试去捕获函数异常
     try
     {
           callDivid(10,0);
     }
     catch(int e)         //若捕获到
     {
           cout << "除数为" << e << "!" << endl;
     }
     system("pause");
     return 0;
}


try
{
}
catch(...)
{
    cout << "未知类型异常!" << endl;
}

技术分享图片

技术分享图片

2.栈解旋

当异常发生时,在throw语句之前在栈上定义的对象都会被自动析构
class MyException{
public:
     MyException(){
           cout << "构造函数!" << endl;
     }
     ~MyException(){
           cout << "析构函数!" << endl;
     }
};
int divide(){
     MyException ex1, ex2;
     cout << "要发生异常了...." << endl;
     throw 1;
}

int main(){
     try{
           divide();
     }
     catch(int e){
           cout << "捕获异常!" << endl;
     }
     system("pause");
     return 0;
}

技术分享图片

3.异常接口声明

//这个函数只能抛出int float char三种类型异常,抛出其他的就报错
void func( ) throw(int,float,char){
     throw "abc";
}

//不能抛出任何异常
void func02( ) throw(){
     throw -1;
}

4.异常对象

class Myexception
{
public:
     Myexception()
     {
           cout<<"构造函数"<<endl;
     }
     Myexception(const Myexception& m)
     {
           cout<<"拷贝构造函数"<<endl;
     }
     ~Myexception()
     {
           cout<<"析构函数"<<endl;
     }
};

void test()
{
     throw Myexception(); //产生匿名对象
}

void test01()
{
     throw &Myexception();
}

void test02()
{
     throw new Myexception();
}

int main( ){
     try
     {
           test();
     }
     catch(Myexception exp)         //1.类变量接匿名对象
     {
           cout<<"捕获到异常"<<endl;
     }

     try
     {
           test();
     }
     catch(Myexception& exp)         //2.类引用接匿名对象
     {
           cout<<"捕获到异常"<<endl;
     }

     try
     {
           test01();
     }
     catch(Myexception *exp)         //3.类指针接匿名对象,  问题:随着test01函数结束,导致对象释放        
     {
           cout<<"捕获到异常"<<endl;
     }

     //解决方法:在堆上分配空间
     try
     {
           test02();
     }
     catch(Myexception *exp)         //3.类指针接匿名对象        
     {
           cout<<"捕获到异常"<<endl;
           delete exp;
     }
     system("pause");
     return 0;
}
结果1:

技术分享图片

结果2:

技术分享图片

结果3:

技术分享图片

结果4:

技术分享图片

以上是关于嘀嘀咕的主要内容,如果未能解决你的问题,请参考以下文章

关于嘀嘀打车产品同质化的看法

嘀~正则表达式快速上手指南(下篇)

[嘀咕]工作与事业

[嘀咕]当人脉被滥用,你正在建立负向人脉

共享经济给制造业带来哪些福利?

如何让无源蜂鸣器在不加单片机的情况下发出嘀嘀嘀的间断声?