1、国家二级 C+机试(操作题)模拟试卷 451及答案与解析 一、基本操作题 1 请使用 VC6或使用【答题】菜单打开考生文件夹 proj1下的工程 proj1,该工程含有一个源程序文件 proj1 cpp。其中位于每个注释 “ ERROR *found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: The value is 10 注意:只修改注释 “ ERROR *found*”的下一行语句,不要改动程序中的其他内容。 proj1 cpp #include using namespace std; class MyClass int value; public: ERROR *
2、found* void MyClass(int val): value(val) int GetValue()constreturnvalue; void SetValue(int val); ; ERROR *found* inline void SetValue(int val) value=val; int main() MyClass obj(0); obj SetValue(10); ERROR*found* 下列语句功能是输出 obj的成员 value的值 cout #include using namespace std; class Employee public: Emplo
3、yee(string name, string dept): *found* _ virtual void print()const; string dept()const 返回部门名称 *found* virtual Employee() private: string name; string dept; ; class Nanager: public Employee public: Nanager(string name, string dept, int level): *found* virtual void print()const; private: int level; ;
4、void Employee: print()const coutprint(); delete emp; return 0; 三、综合应用题 3 请使用 VC6或使用【答题】菜单打开考生目录 proj3下的工程文件 proj3,此工程包含一个源程序文件 proj3 cpp,其中定义了用于表示二维向量的类 My Vector;程序应当显示 (6, 8)。但程序中有缺失部分,请按照以下提示,把缺失部分补充完整: (1)在 “ *1* *found*”的下方是构造函数的定义,它用参数提供的坐标对 x和 y进行初始化。 (2)在 “ *2* *found*”的下方是减法运算符函数定义中的一条语句。两个
5、二维向量相减生成另一个二维向量:其 X坐标等于两向量 X坐标之差,其 Y坐标等于两向量 y坐标之差。 (3)在 “ *3* *found*”的下方,语句的功能是使变量 v3获得新值,它等于向量 v1与向量 v2之和。 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动 “*found*”。 proj3 cpp #include using std: ostream; using std: cout; using std: endl; class My Vector表示二维向量的类 double x; X坐标值 double y; Y坐标值 public: My vect
6、or(double i=0 0, double j=0 0); 构造函数 My Vector operator+(My Vector j); 重载运算符 + friend My Vector operator -(My Vector i, My Vector j), 重载运算符 - friend ostrearn&operator(ostream& os, My vector v); 重载运算符 ; *1* *found* _(double i, double j): x(i), y(j) MyVector MyVector: operator+(Myvector j) return MyVe
7、ctor(x+j x, y+j y); MyVector operator -(MyVector i, MyVector j) *2* *found* return Myvector(_); ostream&operator(ostream&os, MyVector v) os (v x , v y);输出向量 v的坐标 return os; int main() MyVector v1(2, 3), v2(4, 5), v3; *3* *found* v3=_; coutv3endl; return 0; 国家二级 C+机试(操作题)模拟试卷 451答案与解析 一、基本操作题 1 【正确答案
8、】 (1)MyClass(int val): value(val) (3)cout“The value is“obj GetValue()endl: (2)void MyClass: SetValue(int va1)value=val; 【试题解析】 (1)考查构造函数,定义构造函数时不能使用 void,直接使用MyClass(int val)即可。 (2)主要考查成员函数定义,类的成员函数定义时要使用前缀 MyClass,而 inline是内联函数的关键字,在此是错误的,应该删掉 inline并在函数名前加上前缀MyClass,即 void MyClass: SetValue(int va
9、l)value=val; 。 (3)考查成员函数调用, value是私有成员,在主函数中不能直接调用 value,可以使用成员函数 GetValue()来得到 value的值。 二、简单应用题 2 【正确答案】 (1)name_(name), dept_(dept) (2)return dept_; (3)Employee(name, dept), level_(level) (4)Employee: print(); 【试题解析】 (1)主要考查考生对构造函数的掌握,这里使用成员列 表初始化法对私有成员初始化。 (2)主要考查考生对成员函数的掌握,题目要求返回部门名称,因此这里是一条返回语句
10、。函数要求返回的类型为 string,因此直接返回 dept_即可。 (3)主要考查考生对构造函数的掌握,因为 Manager类是 Employee类的派生类,因此它的构造函数要先对基类初始化,应使用成员列表初始化。 (4)主要考查考生对虚函数的掌握,因为 Manager类是 Employee类的派生类,因此它的 print函数可以先调用基类的 print函数,再输出自身要输出的数据,故为 Employee: print();。 三、综合应用题 3 【正确答案】 (1)MyVector: MyVector (2)i xj x, i yj y (3)v1+v2 【试题解析】 (1)主要考查的是构造函数,在类外定义构造函数时要使用类名和作用域,即 MyVector: MyVector。 (2)主要考查重载运算符 “一 ”的返回语句,返回值应为向量 i和 j的差,即MyVector(i xj x, i yj y);。 (3)主要考查重载运算符 “+”的使用,由题目可知 v3是 v1和 v2的和,前面我们已经重新定义了运算符 “+”,所以在这里直接使用语句 v3=vl+v2;即可。