1、二级 C+机试-4 及答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:30.00)1.使用 VC6 打开考生文件夹下的工程 test24_1,此工程包含一个源程序文件 test24_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果为:0001 2-1000l 2-l2 1 1源程序文件 test24_1.cpp 清单如下:#includeiostream.hclass A /*found*/int a=O;public:A(int aa=O):a(aa);class Bint a,b;const int c;A d;public:/*fo
2、und*/B()/*found*/B (int aa, int bb): d(aa+bb)a=aa, b=bb;void print()couta“ “b“ “c“ “endl;void main ( )B a,b(1,2);B x=a,y(b),z(2,1);a.print();b.print();x.print();y.print();z.print();(分数:30.00)填空项 1:_二、2简单应用题(总题数:1,分数:40.00)2.请编写类的成员函数 char Buff=new charLength;CharArray ()delete Buff;int GetLength ()r
3、eturn Length;char private:int Length;char *Buff;char CharArray string1(6);char *string2=“string“;for(cnt=0; cnt8; cnt+)string1cnt = string2cnt;cout“/n“;for(cnt=0; cnt8; cnt+)coutstring1cnt;cout“/n“;coutstring1.GetLength()endl;(分数:40.00)_三、3综合应用题(总题数:1,分数:30.00)3.使用 VC6 打开考生文件夹下的工程 test24_3,此工程包含一个源程
4、序文件 test24_3.cpp,其中定义了抽象类 point 和它的派生类 line,但它们的定义并不完整。请按要求完成下列操作,将程序补充完整。(1)定义类 point 的构造函数,函数含参数 i 和 j 它们都是 int 型数据,默认值都是 0,用 i 和 j 分别将point 的数据成员 x0 和 y0 初始化。请在注释“/*1*”之后添加适当的语句。(2)完成类 point 的成员函数纯虚函数 void set()和 void draw()的定义,请在注释“/*2*”之后添加适当的语句。(3)添加类 line 的构造函数,函数含参数 i,j,m 和 n,它们都是 int 型数据,默认
5、值都是 0,用 i 和 j分别将 point 的数据成员 x0 和 y0 初始化。请在注释“/*3*”之后添加适当的语句。输出结果如下:line:set()called注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件 test24_3.cpp 清单如下:#includeiostream.h class pointpublic:/*1*/*2* protected:int xO,yO;class line: public pointpublic:/*3* x1=m;y1=n;void set() cout“line:set() called./n“; void draw()
6、 cout“line:draw() called./n“; protected:int x1,y1;void main() line *lineobj = new line;1ineobj-set();(分数:30.00)_二级 C+机试-4 答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:30.00)1.使用 VC6 打开考生文件夹下的工程 test24_1,此工程包含一个源程序文件 test24_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果为:0001 2-1000l 2-l2 1 1源程序文件 test24_1.cpp 清单如下
7、:#includeiostream.hclass A /*found*/int a=O;public:A(int aa=O):a(aa);class Bint a,b;const int c;A d;public:/*found*/B()/*found*/B (int aa, int bb): d(aa+bb)a=aa, b=bb;void print()couta“ “b“ “c“ “endl;void main ( )B a,b(1,2);B x=a,y(b),z(2,1);a.print();b.print();x.print();y.print();z.print();(分数:30.0
8、0)填空项 1:_ (正确答案:(1)错误:int a=0;正确:int a;(2)错误;B()正确:B():c(O)a=0;b=0;(3)错误:B(int aa,int bb):d(aa+bb)正确:B(int aa,int bb):c(aa-bb),d(aa+bb))解析:解析(1)主要考查考生对于类的数据成员的初始化,在类的定义中不能对类的数据成员进行初始化,如果想要进行初始化应该使用构造函数和参数的默认值:(2)主要考查考生对于含有常数据成员的类的构造函数的掌握,常数据成员必须在构造函数中进行初始化,而且应该使用参数列表的形式;(3)主要考查考生在构造函数中对常数据成员的赋值的掌握,常
9、数据成员的赋值应使用初始化列表进行。二、2简单应用题(总题数:1,分数:40.00)2.请编写类的成员函数 char Buff=new charLength;CharArray ()delete Buff;int GetLength ()return Length;char private:int Length;char *Buff;char CharArray string1(6);char *string2=“string“;for(cnt=0; cnt8; cnt+)string1cnt = string2cnt;cout“/n“;for(cnt=0; cnt8; cnt+)coutst
10、ring1cnt;cout“/n“;coutstring1.GetLength()endl;(分数:40.00)_正确答案:(char class line: public pointpublic:/*3* x1=m;y1=n;void set() cout“line:set() called./n“; void draw() cout“line:draw() called./n“; protected:int x1,y1;void main() line *lineobj = new line;1ineobj-set();(分数:30.00)_正确答案:(1)point(int i=O,int j=0)x0=i;y0=j;(2)virtual void set()=0;virtual void draw()=0;(3)line(int i=O,int j=0,int m=0,int n=0):point(i,j)解析:解析本题主要考查考生对于纯虚函数和抽象类以及派生类构造函数的使用,注意(2)中纯虚函数的定义格式。纯虚函数是一种特殊的函数,不是在基类中实现,而是在派牛类中实现,说明格式是在函数声明中加入关键字“virtual”和“=0”。如:virtual void set()=0;。而带有纯虚函数的类就是抽象类,它是不能定义对象的,只是一个公共的类。