操作题
1. 使用VC++2010打开考生文件夹下“proj1”文件夹中的工程proj1.sln,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为:
TestClass2
TestClass3
注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//******error******的下面。
#include<iostream>
class TestClass1
{
public:
virtual void fun()=0;
};
class TestClass2:public TestClass1
{
//********error********
int fun()
{
using namespace std;
cout<<"TestClass2"<<endl;
}
};
class TestClass3:public TestClass1
{
//********error********
void fun()
{
//********error********
cout<<"TestClass3"<<endl;
}
};
void main()
{
TestClass1* p;
TestClass2 obj1;
TestClass3 obj2;
p=&obj1;
p->fun();
obj2.fun();
return;
}
【正确答案】(1)void fun()
(2)添加语句:public:
(3)std::cout<<"TestClass3"<<std::endl;或者添加using namespace std;
【答案解析】 本题程序中的功能为输出字符串TestClass2和TestClass3。从已定源程序的main主函数开始入手,可以看出程序通过定义类的对象,利用类中定义的成员函数完成题目中要求的输出。
(1)fun()函数是没有返回值的,而第1个标识下的“int fun()”语句中定义的fun()函数是有int型返回值的,所以将其修改为“void fun()”。
(2)第2个标识下的fun()函数,没有被定义为public型,所以外部其他成员无法访问,只能是类本身访问,所以添加“public:”。
(3)在程序中用到C++标准库时,要使用std标准命名空间进行限定。第三个标识下cout为标准库函数,所以要声明cout是在命名空间std中定义的流对象,即为“std::cout<<"TestClass3"<<std::endl;”或者添加“using namespace std;”。