1、二级 C+笔试 351 及答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.已知一函数的形参说明为 int arr56,则与此等效的形参说明为(分数:2.00)A.int arrB.int5C.int *a6D.int (* 62.下列叙述中正确的是(分数:2.00)A.实体集之间一对一的联系实际上就是二一对应的关系B.关系模型只能处理实体集之间一对一的联系C.关系模型属于格式化模型D.以上三种说法都不对3.为了培养良好的程序设计风格,下列描述中正确的是(分数:2.00)A.程序应简单、清晰、可读性好B.符号名的命名只要符合语法C.充分考
2、虑程序的执行效率D.程序的注释可有可无4.若有以下定义和语句 int a=4.b=3. * p, * q, * w; p=q= w=q;q=NULL; 则以下选项中错误的语句是(分数:2.00)A.*q=0;B.w=p;C.*p=a;D.*p=* w;5.以下叙述中正确的是(分数:2.00)A.在类中,不作特别说明的数据成员均为私有类型B.在类中,不作特别说明的成员函数均为公有类型C.类成员的定义必须是成员变量在前、成员函数在后D.类成员的定义必须放在类定义体内部6.以下选项中,与 k=n+完全等价的表达式是(分数:2.00)A.kn,nn+1B.nn+1,knC.k=+nD.k+=n+17.
3、在 int a3, int, p 中,p 的值是(分数:2.00)A.变量 a 的地址值B.无意义C.变量 p 的地址值D.38.假定有下列变量定义: int k=7,x=12; 则能使值为 0 的表达式是(分数:2.00)A.x*=k-k%5B.x*=(k-k%5)C.x%=(k-=5)D.(x-=-(k+=5)9.下面程序的输出是 main() int x=100, a=10, b=20, ok1=5, ok2=0; if(ab) if(b! =15) if( ! ok1) else if(ok2) x= 10 x=-1 coutxend1; (分数:2.00)A.-1B.0C.1D.不确
4、定的值10.即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员,这说明继承具有(分数:2.00)A.规律性B.传递性C.重复性D.多样性11.下面关于 for 循环的正确描述是(分数:2.00)A.for 循环只能用于循环次数已经确定的情况B.for 循环是先执行循环体语句,后判断表达式C.在 for 循环中,不能用 break 语句跳出循环体D.for 循环的循环体语句中,可以包含多条语句,但必须用花括号括起来12.已知 char a; int b; float c; double d; 则表达式 a*b+c-d 结果为(分数:2.00)A.doubleB.intC.
5、floatD.char13.下列叙述中正确的是(分数:2.00)A.接口复杂的模块,其耦合程度一定低B.耦合程度弱的模块,其内聚程度一定高C.耦合程度弱的模块,其内聚程度一定低D.上述三种说法都不对14.对于 int a37下列表示中错误的是(分数:2.00)A.*(*a+3)B.*(a+1)5C.*(*(a+1)D.*( ; int x, * p; 则以下引用形式中,正确的是(分数:2.00)A.x=value;B.x=C: :value;C.p= else cout“# # # #“; (分数:2.00)A.有语法错误不能通过编译B.输出* * * *C.可以通过编译,但是不能通过连接,因
6、而不能运行D.输出# # # #24.对下列二叉树进行中序遍历的结果是 (分数:2.00)A.ZBTYCPXAB.ATBZXCYPC.ZBTACYXPD.ATBZXCPY25.以下关于派生机制的描述中,不正确的是(分数:2.00)A.派生类不仅可以继承基类的成员,也可以添加自已的成员B.设置 protected 成员是为派生类访问基类成员之用C.采用不同的继承方式,将限制派生类对基类成员的访问D.采用私有继承,派生类只能得到基类的公有成员26.下列叙述中正确的是(分数:2.00)A.数据的逻辑结构与存储结构必定是一一对应的B.由于计算机存储空间是向量式的存储结构,因此,数据的存储结构一定是线性
7、结构C.程序设计语言中的数组一般是顺序存储结构,因此,利用数组只能处理线性结构D.以上三种说法都不对27.软件调试的目的是(分数:2.00)A.发现错误B.改正错误C.改善软件的性能D.挖掘软件的潜能28.析构函数的特征包括(分数:2.00)A.一个类中只能定义一个析构函数B.析构函数与类名没有关系C.析构函数的定义只能在类体内部D.析构函数可以有一个或多个参数29.以下叙述中不正确的是(分数:2.00)A.一个类的友元函数可以无条件的使用这个类的私有成员B.静态成员函数可以直接访问非静态数据成员C.不可以声明抽象类的对象,但可以声明抽象类的指针变量D.静态数据成员为类的所有对象所共有30.下
8、列描述中正确的是(分数:2.00)A.多重继承中,不同父类中不能有同名成员B.多重派生中,所有父类的派生方式必须相同C.多重派生的子类不能再派生子类D.上述三种说法都不对31.已知类 A 有公用数据成员 a,且有 A obj2;A * const ptr=new A;则下列语句正确的是(分数:2.00)A.ptr-a100;B.ptr=“语句时,将自动调用该类的U 【7】 /U。(分数:2.00)填空项 1:_43.若需要把一个函数“void Func();“定义为一个类 Sample 的友元函数,则应在类 Sample 的定义中加入一条语句U 【8】 /U。(分数:2.00)填空项 1:_4
9、4.类 class one 在声明 func 成员函数时发生错误,出错原因是U 【9】 /U。 Class one private: int a; public: void func(two class two private: int b; friend void one: :func(two ; void one: : func(two (分数:2.00)填空项 1:_45.下列程序从保存整数的文本文件“c:Sample. dat“中依次取出每个数据并显示出来,同时统计并显示出所有数据的个数。程序划线处的表达式为U 【10】 /U。 #includestream, h #includest
10、dlib, h void main( ) ifstream fin (“c: Sample. dat“ , ios: :nocreate); if( ! fin) cerr“文件无法打开!“end1; exit(1); int x,i=0; while(_) coutx“; i+; fin. close( ); coutendl“文件中所有整数个数:“iend1; (分数:2.00)填空项 1:_46.类中包含了一个静态成员函数,则 main 函数中和 P. f1 (P); 语句具有同样功能的语句为U 【11】 /U。 #include iostream. h class M public,
11、M(int a) A=a; B+=a; static void f1(M m) private: int A; static int B: void M: :f1(M m) cout“A=“m. Aendl; cout“B=“m. Bendl; int M: :B=10, void main( ) M P(5); P. f1(P); (分数:2.00)填空项 1:_47.main 函数中发生编译错误的语句是U 【12】 /U。 # include iostream. h class A public: int a; const int b: A() :a(10) ,b(20) void fun
12、() const cout“a=“a“/tb=“bend1; ; void main( ) A obj1; const A * ptr = new A: ptr = ptr-a=lO0; ptr-fun(), (分数:2.00)填空项 1:_48.下列程序中的重载函数 disp( )发生错误,错误原因是U 【13】 /U。 # includeiostream, h class Sample private: int m; static int sr; public: Sample(int a) m=a; st+=a; static void disp()coutmend1; static vo
13、id disp(Sample input) coutinput. mend1; ; int Sample: : st=2; void main() Sample Eirst(2), Second(4) Sample: :disp( );Sample: :disp (Second); (分数:2.00)填空项 1:_49.类 time 可以输出 12 小时或 24 小时制的时间,现需要设计一个缺省构造函数,缺省值为 0 时 0 分 0 秒。该缺省构造函数为U 【14】 /U。 # includeiostream. h class Time int h.m,s; public: Time(int
14、hour=0 .int min=0 ,int sec=0) settime(hour,min,sec); void settime(int hour,int min,int sec) h=hour; m=min s=sec; void show24() cout(h1O?“0“:“)h“:“(m10?“0“:“) m“:“MM(s10?“0“:“)send1 void show12( ) int temp=(h=h=12)? 12:h%12; cout(temp10?“0“:“)temp“:“(m10?“0“:“) m“:“(s10? “0“:“)s(temp0 void main() Tim
15、e t(15,43,21) t. show12(): t. show24() (分数:2.00)填空项 1:_50.在下列基类的定义中,有无 virtual 修饰 use 成员函数的结果将不同,其原因是U 【15】 /U。当 use()为虚拟函数时的程序执行结果: sizeof(A)=8 sizeof(B)=12 sizeof(C)=16 当 use()非虚拟函数时的程序执行结果: sizeof(A)=4 sizeof(B)=8 sizeof(C)=12 源程序如下: #include iostream. h class Grandad public: Grandad(): money(10)
16、 int money; virtual void use() , class Father: public Grandad public: Father( ), money(100) int money; void use() ; class Son: public Father public: Son(): money(300) int money; void use() ; void main(void) Grandad A: Father B; Son C; cout “sizeof(A)=“sizeof(A)end1; cout “sizeof(B)=“sizeof(B)end1; c
17、out “sizeof(C)=“sizeof(C)end1(分数:2.00)填空项 1:_二级 C+笔试 351 答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.已知一函数的形参说明为 int arr56,则与此等效的形参说明为(分数:2.00)A.int arrB.int5C.int *a6D.int (* 6 解析:解析 二维数组可以看作是一维数组的扩展。选项 D 表示的是一个一维数不清组,里面每个元素是一个指针,而指针肯定指向某个地址,从而完成二维数组的扩展。考生要注意选项 C 中*和的运算优先级。2.下列叙述中正确的是(分数:2
18、.00)A.实体集之间一对一的联系实际上就是二一对应的关系B.关系模型只能处理实体集之间一对一的联系C.关系模型属于格式化模型D.以上三种说法都不对 解析:解析 实体集之间一对一的联系不一定是一一对应的关系。例如,在一个教室中,实体集“学生”与实体集“座位”之间是一对一的联系。因为实体集“学生”中的每一个学生最多与实体集“座位”中的一个座位有联系(学生坐在该座位上);并且实体集“座位”中中的每一个座位也最多与实体集“学生”中的一个学生有联系(座位上坐着该学生)。但该教室中的学生与座位之间不一定是一一对应的关系,因为有可能某些座位是空的,没有学生去坐。因此,选项 A 中的说法是错误的。在关系模型
19、中,由于使用表格数据来表示实体之间的联系,因此,可以直接描述多对多的实体联系。因此,选项 B 中的说法也是错误的。关系模型是与格式化模型完全不同的数据模型,它与层次模型、网状模型相比有着本质的区别。关系模型是用表格数据来表示实体本身及其相互之间的联系,它是建立在数学理论基础上的。因此,选项 C 中的说法也是错误的。3.为了培养良好的程序设计风格,下列描述中正确的是(分数:2.00)A.程序应简单、清晰、可读性好 B.符号名的命名只要符合语法C.充分考虑程序的执行效率D.程序的注释可有可无解析:解析 良好的程序设计风格主要包括设计的风格、语言运用的风格、程序文本的风格和输入输出的风格。 设计的风
20、格主要体现在三个方面:结构要清晰;思路要清晰,在设计程序时应遵循“简短朴实”的原则,切忌卖弄所谓的“技巧”。 语言运用的风格主要体现在两个方面;选择合适的程序设计语言以及不要滥用语言中的某些特色。特别耍注意,尽量不用灵活性大、不易理解的语句成分。 程序文本的风格主要体现在四个方面:注意程序文本的易读性;符号要规范化;在程序中加必要的注释;在程序中要合理地使用分隔符等。 输入输出的风格主要体现在三个方面;对输出的数据应该加上必要的说明;在需要输入数据时,应该、给出必要的提示,以适当的方式对输入数据进行检验,以确认其有效性。 总之,程序设计的风格应该强调简单和清晰,程序必须是可以理解的,强调“清晰
21、第一,效率第二”。由上所述,符号名的命名不仅要符合语法,而且符号名的命名应具有一定实际含义,以便于对程序功能的理解。因此,选项 B 中的说法是错误的。 由于程序设计的风格强调的是“清晰第一,效率第二”,而不是效率第一。因此,选项 C 中的说法也是错误的。 程序中的注释部分虽然不是程序的功能,计算机在执行程序时也不会执行它,但不能错误地认为注释是可有可无的部分在程序中加入正确的注释能够帮助读者理解程序,注释是提高程序可读性的重要手段。因此,选项 D 中的说法也是错误的。4.若有以下定义和语句 int a=4.b=3. * p, * q, * w; p=q= w=q;q=NULL; 则以下选项中错
22、误的语句是(分数:2.00)A.*q=0;B.w=p;C.*p=a;D.*p=* w; 解析:解析 考生遇到这么复杂的变量间关系时,可以在草稿纸上画出各个变量的内存存放示意图,然后用箭头指向表示指针变量与其他变量之间的关系。如果能够清晰的画出这些变量间关系,则可以会让你容易的判断出正确答案为 D。5.以下叙述中正确的是(分数:2.00)A.在类中,不作特别说明的数据成员均为私有类型 B.在类中,不作特别说明的成员函数均为公有类型C.类成员的定义必须是成员变量在前、成员函数在后D.类成员的定义必须放在类定义体内部解析:解析 类中默认的类型是私有类型,除非特别指定为公有或保护类型。同时,并没有强制
23、要求成员函数和数据成员的排列顺序,如果类的成员函数在类定义体内部定义,则为内联函数,一般类的成员函数都在类定义体的外部实现。6.以下选项中,与 k=n+完全等价的表达式是(分数:2.00)A.kn,nn+1 B.nn+1,knC.k=+nD.k+=n+1解析:解析 本题考察自增运算符和赋值运算符的运算顺序。考生要注意区分+n 和 n+的区别。7.在 int a3, int, p 中,p 的值是(分数:2.00)A.变量 a 的地址值 B.无意义C.变量 p 的地址值D.3解析:解析 本题实际是考察指针的含义。指针代表的是变量或函数等在内存的地址。8.假定有下列变量定义: int k=7,x=1
24、2; 则能使值为 0 的表达式是(分数:2.00)A.x*=k-k%5B.x*=(k-k%5)C.x%=(k-=5) D.(x-=-(k+=5)解析:解析 本题考察考生对表达式的理解。只要考生能正确将表达式展开,并理解各符号的含义,将变量的值代入即可判断出正确答案为 C。9.下面程序的输出是 main() int x=100, a=10, b=20, ok1=5, ok2=0; if(ab) if(b! =15) if( ! ok1) else if(ok2) x= 10 x=-1 coutxend1; (分数:2.00)A.-1 B.0C.1D.不确定的值解析:解析 本题考察订语句的嵌套,e
25、lse 总是与最近的那个 if 配对,只要考生按照逻辑表达式的值进行细心判断就可以得到正确的答案。考生需要注意的是,在 C+语言中,0 表示假,非 0 即为真,因此可以用数字作为逻辑判断的依据。10.即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员,这说明继承具有(分数:2.00)A.规律性B.传递性 C.重复性D.多样性解析:解析 继承具有传递性,从而在类的层次结构中才表现出丰富多彩的特性,呈现出动态性。11.下面关于 for 循环的正确描述是(分数:2.00)A.for 循环只能用于循环次数已经确定的情况B.for 循环是先执行循环体语句,后判断表达式C.在 fo
26、r 循环中,不能用 break 语句跳出循环体D.for 循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 解析:解析 for 循环作为 C 语言中的一种重要的控制结构之一,需要考生扎实掌握,尤其要注意 for循环的三个表达式的执行顺序。12.已知 char a; int b; float c; double d; 则表达式 a*b+c-d 结果为(分数:2.00)A.double B.intC.floatD.char解析:解析 本题考察混合运算表达式类型,由表达式中具有最高优先级的类型所确定,所以答案为A。13.下列叙述中正确的是(分数:2.00)A.接口复杂的模块,其耦合程度一定
27、低B.耦合程度弱的模块,其内聚程度一定高 C.耦合程度弱的模块,其内聚程度一定低D.上述三种说法都不对解析:解析 影响模块之间耦合的主要因素有两个:一是模块之间的连接形式二是模块接口的复杂性。一般来说,接口复杂的模块,其耦合程度要比接口简单的的模块强。因此,选项 A 中的说法是错误的。 耦合和内聚是一个问题的两个方面,耦合程度弱的模块,其内聚程度一定高。因此,选项 C 和 D 中的说法也是错误的;选项 B 中的说法是正确的。14.对于 int a37下列表示中错误的是(分数:2.00)A.*(*a+3)B.*(a+1)5 C.*(*(a+1)D.*( ; int x, * p; 则以下引用形式
28、中,正确的是(分数:2.00)A.x=value;B.x=C: :value; C.p= else cout“# # # #“; (分数:2.00)A.有语法错误不能通过编译B.输出* * * *C.可以通过编译,但是不能通过连接,因而不能运行D.输出# # # # 解析:解析 注意本题本意是考察 x=y+z,但是少写了一个=,因此逻辑表达式变成了赋值语句,故 x的值为 0,即假,因此程序执行 else 部分。本题答案为 D。24.对下列二叉树进行中序遍历的结果是 (分数:2.00)A.ZBTYCPXAB.ATBZXCYPC.ZBTACYXP D.ATBZXCPY解析:解析 按照二叉树中序遍历
29、的方法:在访问根结点、遍历左子树与遍历右手树这三者中:首先遍历左子树,然后访问根结点,最后遍历右子树;并且,在遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。对本题中的二叉树进行中序遍历的结果应是:TZBACYXP。25.以下关于派生机制的描述中,不正确的是(分数:2.00)A.派生类不仅可以继承基类的成员,也可以添加自已的成员B.设置 protected 成员是为派生类访问基类成员之用C.采用不同的继承方式,将限制派生类对基类成员的访问D.采用私有继承,派生类只能得到基类的公有成员 解析:解析 继承方式不同,派生类能够访问的基类的成员数量也不同。继承方式有三种;公有继承,
30、私有继承和保护继承,每种继承方式结合成员函数的类型可以组合成不同的访问级别,从而提供了灵活多样的派生类访问基类的权限。26.下列叙述中正确的是(分数:2.00)A.数据的逻辑结构与存储结构必定是一一对应的B.由于计算机存储空间是向量式的存储结构,因此,数据的存储结构一定是线性结构C.程序设计语言中的数组一般是顺序存储结构,因此,利用数组只能处理线性结构D.以上三种说法都不对 解析:解析 一般来说,一种数据的逻辑结构根据需要可以表示成多种存储结构,因此,数据的逻辑结构与存储结构不一定是一一对应的。选项 A 中的说法是错误的。虽然计算机的存储空间是向量式的存储结构,但由于一种数据的逻辑结构根据需要
31、可以表示成多种存储结构,例如,线性链表是线性表的链式存储结构。一般来说,在线性表的链式存储结构中,各数据结点的存储序号是不连续的,并且各结点在存储空间中的位置关系与逻辑关系也不一致。在线性链表中,各数据元素之间的前后件关系是由各结点的指针域来指示的。因此,数据的存储结构不一定是线性结构。选项 B 中的说法也是错误的。 虽然程序设计语言中的数组一般是顺序存储结构,但是,利用数组也能处理非线性结构。例如,满二叉树与完全二叉树是非线性结构,但对于满二叉树与完全二叉树来说,根据完全二叉树的性质 6,可以按层序进行顺序存储,即利用程序设计语言中的数组来存储,这样,不仅节省了存储空间,又能方便地确定每一个
32、结点的父结点与左右子结点的位置。对于一般的二叉树来说,也可以将二叉树中每一个结点的左指针、右指针以及数据域分别用三个数组中的对应元素来存储,即实际上也是利用了程序设计语言中的数组来处理二叉树这样的非线性结构。选项 C 中的说法也是错误的。综上所述,选项 A、B 与 C 中的说法都是错误的。27.软件调试的目的是(分数:2.00)A.发现错误B.改正错误 C.改善软件的性能D.挖掘软件的潜能解析:解析 软件调试的目的是改正程序中的错误。28.析构函数的特征包括(分数:2.00)A.一个类中只能定义一个析构函数 B.析构函数与类名没有关系C.析构函数的定义只能在类体内部D.析构函数可以有一个或多个
33、参数解析:解析 析构函数不能有参数,是惟一的,没有返回类型,其主要工作就是完成对象销毁前的资源回收等工作。29.以下叙述中不正确的是(分数:2.00)A.一个类的友元函数可以无条件的使用这个类的私有成员B.静态成员函数可以直接访问非静态数据成员 C.不可以声明抽象类的对象,但可以声明抽象类的指针变量D.静态数据成员为类的所有对象所共有解析:解析 静态成员函数不能直接访问非静态数据成员。静态成员只有一份,供同一类的不同对象共享。友元函数对类的访问是完全开放的,从而增加了访问类的灵活性,但却破坏了类的封装性。30.下列描述中正确的是(分数:2.00)A.多重继承中,不同父类中不能有同名成员B.多重
34、派生中,所有父类的派生方式必须相同C.多重派生的子类不能再派生子类D.上述三种说法都不对 解析:解析 本题考察多重继承情况下各层次类的命名和派生规则。31.已知类 A 有公用数据成员 a,且有 A obj2;A * const ptr=new A;则下列语句正确的是(分数:2.00)A.ptr-a100; B.ptr=“语句时,将自动调用该类的U 【7】 /U。(分数:2.00)填空项 1:_ (正确答案:析构函数)解析:解析 采用 new 进行动态分配内存生成新对象的时候,对象执行构造函数,在执行 delete 时,执行对象的析构函数以回收资源。43.若需要把一个函数“void Func()
35、;“定义为一个类 Sample 的友元函数,则应在类 Sample 的定义中加入一条语句U 【8】 /U。(分数:2.00)填空项 1:_ (正确答案:friend void Func();)解析:解析 注意 friend 关键词应加在函数的前面,表示该函数作为本类的一个友元函数。44.类 class one 在声明 func 成员函数时发生错误,出错原因是U 【9】 /U。 Class one private: int a; public: void func(two class two private: int b; friend void one: :func(two ; void on
36、e: : func(two (分数:2.00)填空项 1:_ (正确答案:class one 前没有声明语句 class two;)解析:解析 当一个类作为另一个类的成员函数、成员函数的参数或其他情况的时候,要确保编译器能正确解析。由于在 class one 之前没有关于 class two 的任何说明,而在 class one 的 func 函数中却用了 class two 类的参数。因此是错误的。45.下列程序从保存整数的文本文件“c:Sample. dat“中依次取出每个数据并显示出来,同时统计并显示出所有数据的个数。程序划线处的表达式为U 【10】 /U。 #includestream
37、, h #includestdlib, h void main( ) ifstream fin (“c: Sample. dat“ , ios: :nocreate); if( ! fin) cerr“文件无法打开!“end1; exit(1); int x,i=0; while(_) coutx“; i+; fin. close( ); coutendl“文件中所有整数个数:“iend1; (分数:2.00)填空项 1:_ (正确答案:finx)解析:解析 while 语句用于完成题目指定的功能,则 while 的条件判断部分应完成从文件读取字符的功能,并能够判断出读入字符失败后的情况。46
38、.类中包含了一个静态成员函数,则 main 函数中和 P. f1 (P); 语句具有同样功能的语句为U 【11】 /U。 #include iostream. h class M public, M(int a) A=a; B+=a; static void f1(M m) private: int A; static int B: void M: :f1(M m) cout“A=“m. Aendl; cout“B=“m. Bendl; int M: :B=10, void main( ) M P(5); P. f1(P); (分数:2.00)填空项 1:_ (正确答案:M:f1(P);)解析
39、:解析 由于 f1 是类 M 的静态成员函数,即说明类 M 的任何对象都共享一份 f1,因此,不仅可以从对象那里访问 f1,还可以用域操作符:通过类名来访问。47.main 函数中发生编译错误的语句是U 【12】 /U。 # include iostream. h class A public: int a; const int b: A() :a(10) ,b(20) void fun() const cout“a=“a“/tb=“bend1; ; void main( ) A obj1; const A * ptr = new A: ptr = ptr-a=lO0; ptr-fun(),
40、(分数:2.00)填空项 1:_ (正确答案:ptr-a=100;)解析:解析 本题考察的是 const 的使用。const 修饰的是指针变量的值,及指针本身是可变的,但指针所指对象的值是常量,即 ptr-a 是不能被改变的。48.下列程序中的重载函数 disp( )发生错误,错误原因是U 【13】 /U。 # includeiostream, h class Sample private: int m; static int sr; public: Sample(int a) m=a; st+=a; static void disp()coutmend1; static void disp(
41、Sample input) coutinput. mend1; ; int Sample: : st=2; void main() Sample Eirst(2), Second(4) Sample: :disp( );Sample: :disp (Second); (分数:2.00)填空项 1:_ (正确答案:在静态成员函数的实现中不能直接引用类中说明的非静态成员)解析:49.类 time 可以输出 12 小时或 24 小时制的时间,现需要设计一个缺省构造函数,缺省值为 0 时 0 分 0 秒。该缺省构造函数为U 【14】 /U。 # includeiostream. h class Tim
42、e int h.m,s; public: Time(int hour=0 .int min=0 ,int sec=0) settime(hour,min,sec); void settime(int hour,int min,int sec) h=hour; m=min s=sec; void show24() cout(h1O?“0“:“)h“:“(m10?“0“:“) m“:“MM(s10?“0“:“)send1 void show12( ) int temp=(h=h=12)? 12:h%12; cout(temp10?“0“:“)temp“:“(m10?“0“:“) m“:“(s10?
43、 “0“:“)s(temp0 void main() Time t(15,43,21) t. show12(): t. show24() (分数:2.00)填空项 1:_ (正确答案:Time()h=0;m=0;s=0;))解析:解析 注意缺省构造函数为无参构造函数,且必须为私有数据成员赋初值。50.在下列基类的定义中,有无 virtual 修饰 use 成员函数的结果将不同,其原因是U 【15】 /U。当 use()为虚拟函数时的程序执行结果: sizeof(A)=8 sizeof(B)=12 sizeof(C)=16 当 use()非虚拟函数时的程序执行结果: sizeof(A)=4 si
44、zeof(B)=8 sizeof(C)=12 源程序如下: #include iostream. h class Grandad public: Grandad(): money(10) int money; virtual void use() , class Father: public Grandad public: Father( ), money(100) int money; void use() ; class Son: public Father public: Son(): money(300) int money; void use() ; void main(void) Grandad A: Father B; Son C; cout “sizeof(A)=“sizeof(A)end1; cout “sizeof(B)=“sizeof(B)end1; cout “sizeof(C)=“sizeof(C)end1(分数:2.00)填空项 1:_ (正确答案:采用虚函数的每个派生类都含有一个指向虚函数表的指针,故多 4 字节。)解析:
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1