首先 在程序文件夹创建test.dat文件 如果这个文件里的数据不等于我规定的,那么就抛出异常
话不多说 直接亮代码
/* ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 异常机制 ? ? 基本格式: try{ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?函数代码; ? ? // 这个范围为保护段 ? ? ? ? ? ? ?} ? ? ? ? ? ? ? ? ? ? ? ? ? ?catch(类型 [类型名]){ ? ? ? ? ? ? ? ? 处理语句; ? ? ? ? ? ? ?} ? ? ? ? ? ? ?catch(类型 [类型名]){ ? ? ? ? ? ? ? ? 处理语句; ? ? ? ? ? ? ?} ? ? ? ? ? ? ?catch(...){ ? ...表示可以接受任何异常类型 ? ? ? ? ? ? ? ? ?处理语句; ? ? ? ? ? ? ?}
? ? ?0)异常不管你执行了多少个函数或者递归了多少次 仍然可以直接把错误抛到'try'处 ? ? ?1)使用关键字 throw 抛出异常 ? ? ?2)排他形执行,只执行一个异常处理(catch) ? ? ?3)不能存在相同类型的异常变量 catch(float f1),catch(float f2);? ? ? ?4)如果没有捕捉,则程序直接崩掉 (abort终止函数) ? ? ?5)如果出现异常会终止保护段的代码
? ? ?程序清单5.0演示了该行为 */
// 5.0
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void openFire()
{
string name("0");
ifstream os;
os.open("test.dat", ios::in);
os >> name;
if (name != "#X1777")
throw 0.01f;
else
cout << "openFire函数成功读取机密文件!" << endl;
}
int main1(void)
{
try {
cout << "程序进入保护段..." << endl;
openFire();
cout << "程序运行结束";
}
catch (float fl) {
cout << "出现异常!" << fl;
}
catch (...) {
cout << "捕捉到未处理的异常类型!" << endl;
}
return 0;
}
/* ? ? ? ? ? ? ? ? ? ? ? ? 多重异常处理 ? ? ? ? 一个函数调用另一个函数 另一个函数抛出异常被"调用函数"接受并进行处理, ? ? ? ? 如果该"调用函数"不想处理可以抛至上一个"调用函数"
? ? ? ? 1)如果"调用函数"没匹配到相应类型的异常则会抛到上一个try ? ? ? ? 2)处理了,程序就继续执行
? ? ? ? 程序清单5.1演示了该效果
*/
// 5.1
void openFire2()
{
string name("0");
ifstream os;
os.open("test.dat", ios::in);
os >> name;
if (name != "#X1778") {
throw 32; // throw "32";throw 0.01f;
}
else
cout << "openFire函数成功读取机密文件!" << endl;
}
void play()
{
try {
openFire2();
}
catch (int in)
{
// 这里也可以抛 throw
cout << "出现异常" << in << " paly函数已经处理异常!" << endl;
}
}
int main2(void)
{
try {
cout << "程序进入保护段..." << endl;
play();
cout << "程序运行结束";
}
catch (float fl) {
cout << "出现异常!" << fl;
}
catch (...) {
cout << "捕捉到未经处理的异常类型!" << endl;
}
return 0;
}
/* ? ? ? ? ? ? ? ? ? 异常处理接口声明 ? ? ? ?1)对于异常声明 在函数声明时补充异常声明 ? ? ? ?2)有了接口声明只能抛出声明的异常类型 ? ? ? ?3)如果不想抛异常可以写 throw() ? ? ? ?4)vc++编译器貌似不完全支持该异常规范
? ? ? ?程序清单5.2演示了该内容
*/
// 5.2
void openFire3() throw(int,float,string*)
{
string name("0");
ifstream os;
os.open("test.dat", ios::in);
os >> name;
if (name != "#X1778") {
throw 0.01f;// throw "32";
}
else
cout << "openFire函数成功读取机密文件!" << endl;
}
int main3(void)
{
try {
cout << "程序进入保护段..." << endl;
openFire3();
cout << "程序运行结束";
}
catch (float fl) {
cout << "出现异常!" << fl;
}
catch (...) {
cout << "捕捉到未经处理的异常类型!" << endl;
}
return 0;
}
什么 还没看够? 关注我随时更新C++编程?
|