操作题
1. 使用VC++2010打开考生文件夹下“proj1”文件夹中的工程proj1.sln,该程序运行时有错误,请改正错误,使得程序正常运行,并且要求最后一个catch()必须抛出执行的任何异常。
程序通过抛出异常输出:
error
0
ERROR
注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//******error******的下面。
#include<iostream.h>
int main()
{
try
{
throw("error");
}
//********error********
catch(char s)
{
cout<<s<<endl;
}
try
{
throw((int)0);
}
//********error********
catch()
{
cout<<i<<endl;
}
try
{
throw(0);
throw("error");
}
//********error********
catch()
{
cout<<"ERROR"<<endl;
}
return 0;
}
【正确答案】(1)catch(char*s)
(2)catch(int i)
(3)catch(...)
【答案解析】 本程序是对各种异常信息的处理。try-catch的结构中,catch子句用来捕捉异常的信息。
(1)第1个标识前的异常抛出语句为“throw("error");”,其中的类型为字符串。所以对应的异常捕捉语句catch中应该符合这个类型,而程序中给出的语句“catch(char s)”是字符型的,所以第2个标识下的语句修改为“catch(char* s)”。
(2)第2个标识前的异常抛出语句为“throw((int)0);”,其中的类型为int。所以对应的异常捕捉语句catch中应该符合这个类型,所以补充catch子句中的类型,否则找不到匹配的catch块,那么系统就会调用一个系统函数,使程序终止运行。即第1个标识下的语句修改为“catch(int i)”。
(3)如果在catch子句中没有指定异常信息的类型,那么就用删节号“...”表示它可以捕捉任何类型的异常信息,即修改为“catch(...)”。