基本操作题
1[简答题]
请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释“// ERROR **********found **********”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:
NUM=0
Value=1
注意:只修改注释“// ERROR ****found ****”的下一行语句,不要改动程序中的其他内容。
参考解析:【参考答案】 (1)MyClass(int i=0):NUM(0){
(2)void Increment(MyClass&f){f._i++;}
(3)Increment(obj);
【考点分析】
本题考查的是MyClass类,其中涉及友元函数、构造函数、常量数据成员、成员函数和友元函数的调用。友元函数的定义要与函数声明相呼应,即返回值、参数类型、参数个数要一致。友元函数的调用不需要使用类名和作用域。
【解题思路】
(1)主要考查考生对常量数据成员初始化方法的掌握,常量数据成员的初始化只能通过构造函数的成员初始化列表进行,并且要使用关键字const修饰。该题的前一条语句const int NUM;,说明NUM是常量数据成员。
(2)主要考查考生对友元函数的掌握,友元函数的定义与声明要一致,先看该友元函数的声明部分:friend void Increment(MyClass& f);,返回类型为void,函数参数为MyClass& f;再比较出错的语句:void Increment(){f._i++;},错误在于该函数没有参数,应把MyClass & f填在括号内。
(3)主要考查友元函数的调用,友元函数并不属于类,因此调用友元函数时不需要添加类名及作用域,只需要像调用普通函数一样即可。
【解题宝典】
类的常量数据成员初始化必须使用成员初始化列表进行,否则必然出错。友元函数与普通函数的区别在于,友元函数可以通过对象名调用类的全部成员,包括私有成员。所有函数的声明和定义必须一致,包括函数返回值、参数类型、参数个数及有无const关键字。
微信搜索"考试吧"了解更多考试资讯、下载备考资料
简单应用题
2[简答题]
请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,该工程中包含一个程序文件main.cpp,其中有日期类Date、人员类Person及排序函数sortByName和主函数main的定义。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义和函数定义。此程序的正确输出结果应为:
按姓名排序
排序前
张三男 出生日期:1978年4月20日
王五女出生日期:1965年8月3日
杨六女出生日期:1965年9月5日
李四男 出生日期:1973年5月30日
排序后:
李四男出生日期:1973年5月30日
王五女出生日期:1965年8月3日
杨六女出生日期:1965年9月5日
张三男出生日期:1978年4月20日
注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“// ****found ****”。
参考解析:【参考答案】 (1)is_male(is_male),birth_date(birth_date)
(2)return strcmp(name,p.getName());
(3) <
【考点分析】
本题考查Date类和Person类,其中涉及构造函数、const函数、bool型私有成员及成员函数,以及strcmp()函数。
【解题思路】
(1)主要考查考生对构造函数的掌握,由函数体内strcpy(this- >name,name);可知,要使用成员列表初始化的成员为is_male和birth_date。
(2)主要考查考生对strcmp()函数的掌握,先看程序对该函数的功能要求:利用strcmp()函数比较姓名,返回一个正数、0或负数,分别表示大于、等于、小于。因为strcmp()函数的功能是比较字符串大小,因此可以直接被return语句调用:return strcmp(name,p.getName());。
(3)主要考查考生对成员函数的掌握,程序的注释为:显示出生月,由此可以知道这里要输出出生月份,直接调用函数getMonth()即可。
【解题宝典】
strcmp()函数、strcpy()函数、strlen()函数等是经常会用到的系统函数,要了解各个函数的功能:strait(连接)、strcly(复制)、strump(比较)、strlen(求长度)。
微信搜索"考试吧"了解更多考试资讯、下载备考资料
综合应用题
3[简答题]
请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程文件proj3,此工程中包含一个源程序文件proj3.cpp,其中定义了用于表示平面坐标系中的点的类MyPoint和表示矩形的类MyRectangle;程序应当显示:
(0,2)(2,2)(2,0)(0,0)4
但程序中有缺失部分,请按照以下提示,把缺失部分补充完整:
(1)在 “//** 1 ** **** found ****”的下方是构造函数的定义,它用参数提供的左上角和右下角的坐标对upjeft和down_right进行初始化。
(2)在 “//** 2 ** **** found ****”的下方是成员函数getDownLeft的定义中的一条语句。函数getDownLefit返回用MyPoint对象表示的矩形的左下角。
(3)在 “//** 3 ** **** found ****”的下方是成员函数area的定义,它返回矩形的面积。
注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“**** found ****”。
参考解析:【参考答案】 (1)MyPoint pl,MyPoint p2
(2)up_left.getX(),down-right.getY()
(3)double MyRectangle::
【考点分析】
本题考查表示平面坐标系中的点的类MyPoint、表示矩形的类MyRectangle、构造函数和成员函数。
【解题思路】
(1)考查构造函数,构造函数中的参数要给私有成员赋值,在下句中up_left(p1),down_right(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::即可。
【解题宝典】
构造函数的参数定义时要注意在赋值语句中使用的参数。考查构造函数一般都会考查到形参,应注意联系上下文。类的成员函数在类外定义时要在函数名前面加上:返回值类型+类名+作用域(::)。
微信搜索"考试吧"了解更多考试资讯、下载备考资料