您的位置:首页 > 编程语言

自己的代码的异常的设计案例

2015-06-22 16:20 369 查看
#include<string>

#include<iostream>

using namespace std;

class CMyException

{

//异常类,该类的对象作为抛出异常时传递的异常参数。

public:

CMyException (string n="none") : name(n)

{

//构造函数,根据参数n构造一个名字为n的异常类对象

cout<<"构造一个CMyException对象,名称为:"<<name<<endl;

}

CMyException (const CMyException& e)

{

//拷贝构造函数,根据参数e拷贝构造一个异常类对象

name = e.name;

cout<<"拷贝一个CMyException对象,名称为:"<<name<< endl;

} virtual ~ CMyException ()

{

cout << "销毁一个CMyException对象,名称为:" <<name<< endl;

}

string GetName() {return name;}

protected:

string name; //异常类对象的名字

};

/*

void main()

{

try{

// 构造一个异常对象,即会调用一次CMyException类

//的构造函数。这是个局部变量。

CMyException obj1("obj1");

//下面抛出异常对象。注意:这时VC编译器会复制

//一份新的异常对象,即调用一次CMyException

//类的拷贝构造函数。新拷贝的对象是个临时变量。 1

throw obj1;

}

catch(CMyException e)

{

//当异常参数传递给e时,由于是传值方式,因 2

//此会调用一次拷贝构造函数

cout<<"捕获一个CMyException类型异常,名称为:"<<e.GetName()<<endl;

}

cout<<"程序运行结束!"<< endl;

}

*/

//插入例5.10中CMyException类的定义

/*

void main()

{

try{

// 构造一个异常对象,即会调用一次CMyException类

//的构造函数。这是个局部变量。

CMyException obj1("obj1");

//这里抛出异常对象。注意:这时VC编译器会复制一份新

// 的异常对象,即调用一次CMyException类的拷贝构造

//函数。新拷贝的对象是个临时变量。

throw obj1;

}

catch(CMyException &e) //按引用方式传值

{

//此处传递给e的实际是上面临时对象的引用,因此不调

//用任何构造函数。

cout<<"捕获一个CMyException类型异常,名称为:"<<e.GetName()<<endl;

}

cout<<"程序运行结束!"<< endl;

system("pause");

}

*/

/*

void main()

{

try

{

throw new CMyException ("obj1");

}

catch(CMyException* e)

{

cout<<"www"<<e->GetName()<<endl;

delete e;

}

system("pause");

}*/

//此处包含例5.10中的CMyException类代码

class CTestClass

{

//测试类,其构造函数可能抛出int型或char*型异常

public:

CTestClass(int x) throw(int);

void print();

private:

int a;

};

CTestClass:: CTestClass(int x) throw(int)

{

//可能抛出int型或char*型异常,但其本身不处理int类型异常

try

{

if(x==0)

throw 0;

if(x>1000)

throw "x值太大!";

a = 100/x;

}

catch(char* s)

{

cout<<"处理了char*类型异常信息:"<<s<<endl;

}

}

void CTestClass::print()

{

cout<<a<<endl;

}

void func8(int x) throw(CMyException, int)

{

// 可能抛出CMyException, int类型异常

CTestClass a(x);

a.print();

CMyException obj2("obj2");

throw obj2;

}

void func9() throw(char*)

{

// 可能抛出char*类型异常

char *p = new char[20];

try

{

//可能引起异常的代码

throw "error";

}

catch(...)

{

// 释放申请的空间p后将异常继续抛出

cout <<"释放申请的空间"<<endl;

delete p;

throw;

}

}

void main()

{

try

{ //可能产生异常的代码

throw new CMyException("obj1");

}

catch(CMyException *e)

{

cout<<"捕获一个CMyException类型的异常,名称为:"<<e->GetName()<<endl;

delete e;

}

try

{

cout<<"请输入一个int类型的值:";

int x=0;

cin>>x;

// func8(x);

func9();

}

catch(int x)

{

cout<<"处理了int类型的异常:"<<x<<endl;

}

catch(char *s)

{

cout<<"处理了char*类型的异常:"<<s<<endl;

}

catch(CMyException &e)

{

cout<<"处理了CMyException类型的异常:"<<e.GetName()<<endl;

}

catch(...)

{

cout<<"处理了所有类型的异常!"<<endl;

}

cout<<"程序运行结束!"<< endl;

system("pause");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: