1、国家二级 C+机试(操作题)模拟试卷 484及答案与解析 一、基本操作题 1 请打开考生文件夹下的解决方案文件 proj1,该工程中含有一个源程序文件proj1 cpp。其中位于每个注释 “ ERROR*found*”之后的一行语句有错误。请改正这些错误,使程序的输出结果为: 1 2 3 4 5 6 7 8 9 10 注意:只能修改注释 “ ERROR*found*”的下一行语句,不要改动程序中的其他内容。 proj1 cpp #include iostream using namespace std; class MyClass public: MyClasS(int len) array=
2、new intlen; arraySize=len; for(int i=0; i arraySize; i+) arrayi=i+1; MyClass( ) ERROR*found* delete arrayi; void Print( )const for(int i=0; i arraySize; i+) ERROR*found* cin arrayi ; cout end1; private: int*array; int arraysize; ; int main( ) ERROR*found* MyClass obj; obj Print( ); return0; 二、简单应用题
3、2 请打开考生文件夹下的解决方案文件 proj2,其中定义了 Component类、Composite类和 Leaf类。 Component是抽象 基类, Composite和 Leaf是 Component的公有派生类。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为: Leaf Node 注意:只能在横线处填写适当的代码,不要改动 程序中的其他内容,也不要删除或移动 “ *found*”。 #include ioStream using namespace std; class Component public: 声明纯虚函数 print( ) *found*
4、 _ ; class Composite: public Component public: *found* VOid SetChild(_) m_child=chiid; virtual void print( )const m_chiid- print( ); private: Component*m_chiid; ; class Leaf: public Component public: virtualvoidprint( )const *found* ; int main( ) Leaf node; Composite comp; comp setChiid(&node); Comp
5、onent*p=&comp: p- print( ); return0; 三、综合应用题 3 请打开考生文件夹下的解决方案文件 proj3,其中声明的 CDeepCopy是一个用于表示矩阵的类。请编写这个类的赋值运算符成员函数 operator=,以实现深层复制。 要求: 补充编制的内容写在 “ *333*”与 “*666*”之间。不得修改程序的其他部分。 注意:程序最后将结果输出到文件 out dat中。输出函数 writeToFile已经编译为0bj文件,并且在本程序中调用。 CDeepCopy h #include iostream #include string using names
6、pace std; class CDeepCopy public: int n;动态数组的元素个数 int*p;动态数组首地址 CDeepCopy(int); CDeepCopy( ); CDeepCopy&operator=(const C DeepCopy&r);赋值运算符函数 ; VOid writeToFile(char*); main cpp #include“CDeepCopy h“ CDeepCopy: CDeepCopy( )delete p; CDeepCopy: CDeepCopy(int k)n=k; p=newintn; 构造函数实现 CDeepCopy&CDeepCo
7、py: operator=(constCDeepCopy&r) 赋值运算符函数实现 *333* *333* int main( ) CDeepCopy a(2), d(3); a p0=1; d po=666; 对象 a, d数组元素的赋值 CDeepCopyb(3); a p0=88; b=a; 调用赋值运算符函数 cout b p0; 显示内层局部 对象的数组元素 cout d p0; 显示 d数组元素 a p0的值 cout “d fade away; n“; cout a p0; 显示 a数组元素 a p0的值 writeToFile(“ “); return0; 国家二级 C+机试(
8、操作题)模拟试卷 484答案与解析 一、基本操作题 1 【正确答案】 delete array; cout arrayi ”; MyClass obj(10); 【试题解析】 (1)语法错误,使用 delete语句删 除一个指针时,直接把指针变量的名称放在 delete 后面即可。 (2)考查考生对输入、输出语句的运用。使用 Cc3ut进行数据输出操作,一般格式为: cout Expr;。其中, Expr代表一个表达式, “ ”称为插入运算符,该语句的含义是,将表达式 Expr的值输出到屏幕上。使用 cin进行数据输入操作,一般格式为: cin var;。其中, var代表一个变量, “ ”称
9、为提取运算符,该语句的含义是,将用户输入的数据保存到 var中。 (3)考查语句的初始化,我们来看 MyClass类的构造函数: MyClasS(int len) array=new intlen; 给数组动态分配空间,大小为 len arraySize=len;赋值 for(int i=0; i arraySize; i+) arrayi=i+1;循环 给数组赋值,从 1到 10 请注意:形参 len没有定义默认值,因此要想使 array动态数组里依次存放 1, 2,3, 4, 5, 6, 7, 8, 9, 10,就是要给 len赋值为 10。 二、简单应用题 2 【正确答案】 (1)vir
10、tual void print( )const=0; (2)Component*child (3)cout “Leaf Node“ endl; 【试题解析】 (1)主要考查考生对纯虚函数的掌握,题目要求声明纯虚函数print( )。在其派生类中 print( )函数的定义为 virtual void print( )const,由此可知纯虚函数为 virtual void print( )const=0。 (2)主要考查考生对成员函数的掌握,题目要求填写函数 void setChild的形参,由setChild的函数体可知形参为 child,再看类的私有成员 m_child的定义:Compon
11、ent*m_child;。由此可知形参为: Component*child。 (3)主要考查考生对纯虚函数的掌握,先看主函数的程序: Leaf node; Composite comp; comp setChiid(&node); Component*p=∁ p- print( ); 第一条和第二条语句都是定义语句,第三条语句调用函数 setChild,由 setChild函数的定义可知, comp中的 m_child等于 node,第四条语句定义了个指针 p指向comp的地址,也就 是 node,最后一条语句通过指针 p调用函数 print,也就是调用类 Leaf的函数 print
12、,因为题目要求输出: Leaf Node,因此在这里添加语句:tout “Leaf Node“ endl;。 三、综合应用题 3 【正确答案】 n=r n;把对象 r字符长度赋值给 n delete p;删除动态数组 p p=new intn;给动态数组 p分配空间为 n for(int i=0; i n; i+)遍历对象 r中的数组 p pi=r pi;把 r pi赋值给 pi return*this;返回被赋值的对象 【试题解析】 主要考查考生对运算符重载的掌握,由注释可知此处要实现赋值运算符函数。要重载的运算符是 “=”,该类的成员是动态数组 p,数组元素个数为n,因此先释放原来的动态数组,再分配空间,然后逐个复制元素即可。