1、国家二级 C+机试(操作题)模拟试卷 466及答案与解析 一、基本操作题 1 请使用 VC6或使用【答题】菜单打开考生文件夹 proj1下的工程 proj1,该工程中包含程序文件 main cpp,其中有类 Door(“门 ”)和主函数 main的定义。程序中位于每个 “ ERROR*found*”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为: 打开 503号门 门是锁着的,打不开。 打开 503号门的锁 锁开了。 打开 503号门 门打开了。 打开 503号门 门是 开着的,无须再开门。 锁上 503号门 先关门 门锁上了。 注意:只修改每个 “ ERROR*found*”下的
2、那一行,不要改动程序中的其他内容。 #inClude using namespace std; class Door int num; 门号 bool closed; true表示门关着 bool locked; true表示门锁着 public: Door(int num) ERROR*found* num=this-num; closed=locked=true; bool isClosed()constreturn closed; 门关着时返回 true,否则返回 false bool isOpened()constreturn !closed; 门开着时返回 true,否则返回 fal
3、se bool isLocked()Constreturn locked; 门锁着时返回 true,否则返回 false bool isUnlocked()COnStreturn!locked; 门未锁时返回 true,否则返回 false void open() 开门 cout using namespace std; Class XBase private: int mem1, mem2; public: *found* XBase(int m1=0, int m2=0): mem1(m1), _() *found* virtual int_ ; *found* class XDerive
4、d: _ private: int mem3; public: XDerived(): XBase(), mem3(0) *found* XDerived(int m1, int m2, int m3): _ int sum()return XBase: slim()+mem3; ; void main()( XDerived b(3, 4, 5); XBase a(6, 7), *pb=&b; int s=pb-SLIm()+a sum(); cout using namespace std; class MyPoint表示平面坐标系中的点的类 double x; double y; pub
5、lic: MyPoint(double x, double y) this-x=x; this-y=y; ) double getX()constreturn x; double getY()constreturn y; void show()constcoutnum=num; (2)if(!closed) (3)void lock() 【试题解析】 (1)主要考查考生对 this指针的掌握,在构造函数中 this指针指向的是当前类,因此要给 num赋值使用语句 this-num=num;完成。 (2)主要考查考生对 if语句的掌握,先看类的私有成员中关于 closed的定义:bool clo
6、sed; true表示门关着。再看下一条语句: cout“门是开着的,无须再开门。 “;。即满足条件时就会输出:门是开着的,无须再开门。因此 if括号内应该是 !closed。 (3)主要考查考生对 const函数的掌握, lock函数体中存在语句 locked=true,即有参数发生改变,因此不能用 const。 二、简单应用题 2 【正确答案】 (1)mem2(m2) (2)sum()return mem1+mem2; (3)public XBase (4)XBase(m1, m2), mew3(m3) 【试题解析】 (1)题意要求使用 m1和 m2初始化数据成 员 mem1和 mem2,
7、同mem1的初始化一样,需要在成员初始化列表中完成 mem2的初始化。 (2)sum函数的定义需要返回 mem1和 mem2之和。 (3)XDerived公有继承 XBase类,在继承列表中使用 public。 (4)在成员初始化列表中初始化基类成员时,需要调用基类的构造函数,初始化mem3时,可以直接初始化。 三、综合应用题 3 【正确答案】 (1)MyPoint p1, MyPoint p2 (2)up_left getX(), down_right getY() (3)double MyRectangle: 【试题解析】 (1)考查构造函数,构造函数中的参数要给私有成员赋值,在下句中 up_left(p1), down_fight(p2)指出私有成员赋值要使用形参 p1和 p2,因此这里参数要定义为 MyPoint p1, MyPoint p2。 (2)主要考查成员函数的返回语句, MyPoint My Rectangle:getDownLeft()const函数要求返回一个左下角的点坐标,因此使用语句MyPoint(up_left getX(), down_right getY();。 (3)主要考查成员函数的定义,在 MyRectangle类中已经声明 double area()const,因此此处只要添加 double MyRectangle:即可。