1、国家二级 C+机试(操作题)模拟试卷 94及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modil cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为: TestClass2 TestClass3 注意:不要改动 main函数,不能增行或删行,也不能更改程序的结构,错误的语句在 *error*的下面。 #include class TestClassl public: virtual void fun()=0; ; class TestClass2: public TestClassl *error* int fun() us ing
2、 namespace std ; coutfun(), obj 2 fun(); return; 二、简单应用题 2 使用 VC6打开考生文件夹下的源程序文件 modi2 cpp。请补充完整程序 fun(int i),使程序完成以下功能: 如果 i=5,则输出如下 5行井号。 # # # # # 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 #include void fun(int i) int main() fun(5); return 0 ; 三、综合应用题 3 使用 VC6打开考生文件夹下的源程序文件 modi3 cpp,要求编写一个CMyShape类,含有
3、求面积求周长等纯虚函数。然后编写一个 CMyRectangle类和CMyCirele类继承 CMyShape,并实现求面积、求周长的两个函数。在 mainC函数中测试得到下面的结果: 在 CMyShape类构函数造内 在 CMyCircle类构造函数内 在 CMyShape类构造函数内 在 CMyRectangle类构造函数内 myCircle: Area=314 159 Girth=62 8319 myRectangle: Area=900 Ginh=120 具体要求如下: (1)定义求面积纯虚函数,请在注释 *1*之处添加适当的语句。 (2)定义求周长纯虚函数,请在注释 *2*之处添加适当
4、的语句。 (3)请在注释 *3*和 *4*之处添加适当的语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 #include #include #define PI 3 1415926 class CMyPoint public: int x, y; CMyPoint(int tx, int ty): X(tx), y(ty) ; class CMyShape public: CMyShape()coutGetArea() GetGirth()GetArea() GetGirth()()=0,由程序后面的函数体实现可知求面积纯虚函数的函数名为 GetArea0,因此第 1个标
5、识下应添加 “virtual doubleGetArea0=0; ”。 (2)声明格式和 (1)相同,由求周长的函数具体实现可知该函数的名为 GetGirth(),因此第 2个标识下应添加 “virtual double GetGirth0=0; ” (3)主函数中定义了 CMyShape类对象指针 myShape, CMyCircle类对象指针myCircle, CMyRectangle类对象指针 myRectangle,由类继承关系知,在调用子类的构造函数的时候,编译器会自动调用父类的默认构造函数来初始化父类,因此在实例化类 CMyRectangle和类 CMyCircle的实例的时候,抽
6、象父类CMyShape的默认构造函数会先被调用,因此在屏幕上先输出 “在 CMyShape类构函数造内 ”,然后输出 “在 CMyCircle类构造函内 ”,实例化 CMyRectangle对象的过程也是如此。同时由纯虚函数的性质知,抽象基类不需要实现纯虚函数,它的实现是在子类中完成的,但是通过用子类实例隐式转换成基类实例,可以使得基类实例具有子类实例的特性,因此可以访问子类的成员函数, myShape是基类指针,其虚函数 GetArea0和 GetGirth0没有实现,要求程序输出面积值和周长值,只可能是 myShape指向子类对象,调用子类的函数 GetAreaO和 OetOirth0打印输出,显然第 3个标识下是 myShape指向子类 CMyCircle对象,即 myShape-myCircle;。 (4)同理第 4个标识下 myShape指向子类 CMyRectangle对象,即第 4个标识下应添加 “myShape=myRectangle; ”。