全国计算机二级C考题真题及解析_第1页
全国计算机二级C考题真题及解析_第2页
全国计算机二级C考题真题及解析_第3页
全国计算机二级C考题真题及解析_第4页
全国计算机二级C考题真题及解析_第5页
已阅读5页,还剩164页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、全国计算机二级C+考试真题及答案【2006年至2011年3月】注:前面真题 后面有答案解析 2010年9月没有答案E-mail:2011年3月考试真题(第33次)一、选择题 (1)下列关于栈叙述正确的是 A)栈顶元素最先能被删除     B)栈顶元素最后才能被删除 C)栈底元素永远不能被删除   D)以上三种说法都不对 (2)下列叙述中正确的是 A)有一个以上根结点的数据结构不一定是非线性结构 B)只有一个根结点的数据结构不一定是线性结构 C)循环链表是非线性结构 D)双向链表是非线性结构 (3)某二叉树共有7个结点,其中叶子结点只有

2、1个,则该二叉树的深度为(假设根结点在第1层) A)3          B)4          C)6          D)7 (4)在软件开发中,需求分析阶段产生的主要文档是 A)软件集成测试计划         B)软件详细设计说明书 C)

3、用户手册                 D)软件需求规格说明书 (5)结构化程序所要求的基本结构不包括 A)顺序结构                 B)GOTO跳转 C)选择(分支)结构       

4、60; D)重复(循环)结构 (6)下面描述中错误的是 A)系统总体结构图支持软件系统的详细设计 B)软件设计是将软件需求转换为软件表示的过程 C)数据结构与数据库设计是软件设计的任务之一 D)PAD图是软件详细设计的表示工具 (7)负责数据库中查询操作的数据库语言是 A)数据定义语言 B)数据管理语言 C)数据操纵语言 D)数据控制语言 (8)一个教师可讲授多门课程,一门课程可由多个教师讲授。则实体教师和课程间的联系是 A)1:1联系    B)1:m联系 C)m:1联系    D)m:n联系 (9)有三个关系R、S和T如下:则由关

5、系R和S得到关系T的操作是 A)自然连接   B)交         C)除          D)并(10)定义无符号整数类为UInt,下面可以作为类UInt实例化值的是A)-369       B)369        C)0.369   

6、60;   D)整数集合1,2,3,4,5(11)为了提高函数调用的实际运行速度,可以将较简单的函数定义为A)内联函数   B)重载函数   C)递归函数    D)函数模板(12)若AA为一个类,a为该类的非静态数据成员,在该类的一个成员函数定义中访问a时,其书写格式为A)a          B)AA.a       C)a()  &

7、#160;      D)AA:a() (13)当派生类从一个基类保护继承时,基类中的一些成员在派生类中成为保护成员,这些成员在基类中原有的访问属性是 A)任何       B)公有或保护 C)保护或私有 D)私有 (14)若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是 A)Data+(Data); B)Data operator+(Data); C)Data+operator(Data); D)operator+(Data,Data); (15)下列关于函数模

8、板的描述中,正确的是 A)函数模板是一个实例函数 B)使用函数模板定义的函数没有返回类型 C)函数模板的类型参数与函数的参数相同 D)通过使用不同的类型参数,可以从函数模板得到不同的实例函数 (16) C+系统预定义了4个用于标准数据流的对象,下列选项中不属于此类对象的是 A)cout       B)cin        C)cerr       D)cset (17)Windows环境下,由C+源程序文

9、件编译而成的目标文件的扩展名是 A)cpp        B)exe        C)obj         D)lik (18)字符串“a+b=12nt”的长度为 A)12         B)10        

10、C)8           D)6 (19)有如下程序: #include using namespace std; int main() int f,f1=0,f2=1; for(int i=3;i<=6;i+) f=f1+f2; f1=f2;f2=f; cout<<F<return 0; 运行时的输出结果是 A)2          B)3   &#

11、160;      C)5           D)8 (20)有如下程序: #include using namespace std; int main() int a6=23,15,64,33,40,58; int s1,s2; s1=s2=a0; for(int* p=a+1;pif(s1>*p) s1=*p; if(s2<*p) s2=*p; cout<<S1+S2<return 0; 运行时的输出结果是 A

12、)23         B)58         C)64          D)79 (21)有如下程序: #include using namespace std; void f1(int& x,int& y) int z=x; x=y; y=z; void f2(int x;int y)   int z=x

13、; x=y; y=z; int main() int x=10,y=26; f1(x,y); f2(x,y); cout<<Y<return 0; 运行时的输出结果是 A)10         B)16         C)26          D)36 (22)有如下程序: #include using namespace s

14、td; class XA int a; public: static int b; XA(int aa):a(aa) b+; XA() int get()return a; ; int XA:b=0; int main() XA d1(2),d2(3); cout< return 0; 运行时的输出结果是 A)5          B)6          C)7    

15、       D)8 (23)有如下程序: #include using namespace std; class Point int x,y; public: Point(int x1=0,int y1=0):x(x1),y(y1) int get()return x+y; ; class Circle Point center; int radius; public: Circle(int cx,int cy,int r):center(cx,cy),raaius(r) int get()return center.get()+r

16、adius; ; int main() Circle c(3,4,5); cout<<C.GET()<return 0; 运行时的输出结果是 A)5          B)7          C)9           D)12 (24)若要对类BigNumber中重载的类型转换运算符long进行声

17、明,下列选项中正确的是 A)operator long() const; B)operator long(BigNumber); C)long operator long() const; D)long operator long(BigNumber); (25)有如下函数模板定义: template T1 FUN(T2 n)return n*5.0; 若要求以int型数据9作为函数实参调用该模板,并返回一个double型数据,则该调用应表示为 A)FUN(9)           &

18、#160;       B)FUN<9> C)FUN(9)           D)FUN<9>(double) (26)下列语句都是程序运行时的第1条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是 A)cout<<INTERNAL<B)cout<<LEFT<C)cout<<RIGHT<D)cout<(27)下列关于析构函数的描述中,错误的

19、是 A)析构函数可以重载 B)析构函数由系统自动调用 C)每个对象的析构函数只被调用一次 D)每个类都有析构函数 (28)下列关于构造函数的描述中,错误的是 A)构造函数名与类名相同      B)构造函数可以有返回值 C)构造函数可以重载          D)每个类都有构造函数 (29)若PAT是一个类,则程序运行时,语句“PAT(*ad)3;”调用PAT的构造函数的次数是 A)0      

20、    B)1          C)2           D)3 (30)下列描述中,错误的是 A)公有继承时基类中的公有成员在派生类中仍是公有成员 B)公有继承时基类中的保护成员在派生类中仍是保护成员 C)保护继承时基类中的公有成员在派生类中仍是公有成员 D)保护继承时基类中的保护成员在派生类中仍是保护成员 (31)生成派生类对象时,派生类构造函数调用基类构造函数的条件是

21、 A)无需任何条件 B)基类中显式定义了构造函数 C)派生类中显式定义了构造函数 D)派生类构造函数明确调用了基类构造函数 (32)下列关于派生类和基类的描述中,正确的是 A)派生类成员函数只能访问基类的公有成员 B)派生类成员函数只能访问基类的公有和保护成员 C)派生类成员函数可以访问基类的所有成员 D)派生类对基类的默认继承方式是公有继承 (33)有如下类模板定义: template class BigNumber long n; public: BigNumber(T i):n(i) BigNumber operator+(BigNumber b) return BigNumber(n+

22、b.n); ; 己知b1、b2是BigNumber的两个对象,则下列表达式中错误的是 A)bl+b2      B)b1+3       C)3+b1        D)3+3 (34)下列关于文件流的描述中,正确的是 A)文件流只能完成针对磁盘文件的输入输出 B)建立一个文件流对象时,必须同时打开一个文件 C)若输入流要打开的文件不存在,将建立一个新文件 D)若输出流要打开的文件不存在,将建立一个新文件 (35)有

23、如下程序: #include using namespace std; class Pair int m,n; public: Pair(int j,int k):m(j),n(k) int get() return m; int get() const return m+n; ; int main() Pair a(3,5); const Pair b(3,5); cout+a.get()<return 0; 运行时的输出结果是 A)33         B)38   

24、0;     C)83          D)88 二、填空题 (1)有序线性表能进行二分查找的前提是该线性表必须是 【1】 存储的。 (2)一棵二叉树的中序遍历结果为DBEAFC,前序遍历结果为ABDECF。则后序遍历结果为 【2】 。 (3)对软件设计的最小单位(模块或程序单元)进行的测试通常称为 【3】 测试。 (4)实体完整性约束要求关系数据库中元组的 【4】 属性值不能为空。 (5)在关系A(S,SN,D)和关系B(D,CN,NM)中,A的主关键字是S,B

25、的主关键字是D,则称 【5】 是关系A的外码。 (6)若有定义语句“int x=10,y=20,z=20;”,则表达式x>z&&y=z的值为 【6】 。 (7)有如下语句序列: int x=-10;while(+x) 运行时while循环体的执行次数为 【7】 。 (8)有如下语句序列: int arr22=9,8,7,6; int *p=arr0+1; cout<<*p<运行时的输出结果是 【8】 。 (9)函数fun的功能是将一个数字字符串转换为一个整数,请将函数补充完整。 int fun(char *str) int num=0; while(*s

26、tr) num*=10; num+= 【9】 ; str+; return num; (10)若要将函数“void FriFun();”声明为类MyClass的友元函数,则应在类MyClass的定义中加入语句 【10】 。 (11)下列程序的输出结果为012,请根据注释将横线处的缺失部分补充完整。 #include using namespace std; class Test public: Test(int a) data=a; Test() void print()cout<private: int data; ; int main() Test t3= 【11】 ;/对有3个元素

27、的Test类对象数组t初始化ti.print(); for(int i=0;i<3;i+) return 0; (12)请在横线处填写派生类Derived的继承方式,使得程序的输出结果为Base。 #include using namespace std; class Base public: void print()cout<<"Base" ; class Derived: 【12】 Base; int main() Derived d; d.print(); return 0; (13)下列程序的输出结果为1 2.3 2 4.6,请将横线处的缺失部分补

28、充完整。 #include using namespace std; class Base public: Base(int a):idata(a) void print()cout<<IDATA<<'' private: int idata; ; class Derived:public Base public: Derived(int a;double b): 【13】 ,ddata(b) void print()Base:print();cout<<DDATA<<'' private: double ddat

29、a; ; int main() Derived dl(1,2.3),d2(2,4.6); d1.print(); d2.print(); return 0; (14)下列程序的输出结果为-5/8 -3/4,请将横线处的缺失部分补充完整。 #include using namespace std; class Fraction /“分数”类 public: Fraction(double a,double b):num(a),den(b) Fraction() /重载取负运算符“-”,返回一个分数对象,其分子是原来分子的相反数。 Fraction operator-() 【14】 return

30、f; void print() cout<<NUM<<' private: double num; /分子 double den; /分母 ; int main() Fraction f1(5;8),f2(3,4); (-f1).print();(-f2).print(); return 0; (15)函数Min的功能是返回具有n个元素的数组array中的最小值。请将横线处的缺失部分补充完整,使得程序的输出结果为1.24。 #include using namespace std; template T Min(T* array,int n) T min=arr

31、ay0; for(int i=1;iif(arrayireturn min; int main() double arr8=5.2,48.45,41.01,42,51.2,1.24,14.12,42; cout<< 【15】 ; return 0; 选择题ABDDB ACDCB CDAAA ADCAD BDBCD CDCCA BBCDB CDDCB填空题 顺序 DEBFCA 单元 主键 D 3 1217 0,9 4 20,0 i-1 double avg (double a,double b) 13715 emodew 123456 2006年9月考试真题(第24次)1. 从工程管

32、理角度,软件设计一般分为两步完成,它们是_。A、概要设计与详细设计 B、过程控制 C、软件结构设计与数据设计D、程序设计与数据设计从工程管理角度看,软件设计分为两步完成:概要设计与详细设计。概要设计(又称结构设计)将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式;详细设计确立每个模块的实现算法和局部数据结构,用适当方法表示算法和数据结构的细节。 故本题答案为A。2. 数据库技术的根本目标是解决数据的_。A、存储问题 B、共享问题 C、安全问题 D、保护问题由于数据的集成性使得数据可为多个应用所共享,特别是在网络发达的今天,数据库与网络的结合扩大了数据关系的应用范围。数据的

33、共享本身又可极大地减少数据冗余性,不仅减少了不必要的存储空间,更为重要的是可以避免数据的不一致性。因此,数据库设计的根本目标是要解决数据共享问题。 故本题答案为B。3. 在数据库系统中,用户所见数据模式为_。A、概念模式 B、外模式 C、内模式 D、物理模式数据库管理系统的三级模式结构由外模式、模式和内模式组成。外模式又称为子模式,或用户模式,是指数据库用户所看到的数据结构,是用户看到的数据视图。模式又称为逻辑模式,是数据库中对全体数据的逻辑结构和特性的描述,是所有用户所见到的数据视图的总和。外模式是模式的一部分。内模式又称为存储模式或物理模式,是指数据在数据库系统内的存储介质上的表示,即对数

34、据的物理结构和存取方式的描述。 故本题答案为B。4. 在长度为64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为_。A、63 B、64 C、6 D、7在进行顺序查找过程中,如果线性表中的第1个元素就是被查找元素,则只需做一次比较就查找成功,查找效率最高;但如果被查找的元素是线性表中的最后一个元素,或者被查找的元素根本就不在线性表中,则为了查找这个元素需要与线性表中所有的元素进行比较,这是顺序查找的最坏情况。所以对长度为n的线性表进行顺序查找,在最坏情况下需要比较n次。 故本题答案为B。5. 对下列二叉树进行中序遍历的结果是_。A、ACBDFEG B、ACBDFGE C、ABDCGEF

35、D、FCADBEG 二叉树的中序遍历指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历左子树,然后访问根结点,最后遍历右子树;并且遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。 故本题答案为A。6. 下列选项中不属于软件生命周期开发阶段任务的是_。A、软件测试 B、概要设计 C、软件维护 D、详细设计软件生命周期分为软件定义、软件开发及软件维护。其中软件开发阶段的任务中软件设计阶段可分解成概要设计阶段和详细设计阶段;软件维护不属于软件开发阶段。 故本题答案为C。7. 下列叙述中正确的是_。A、一个算法的空间复杂度大,则其时间复杂度也必定大B、一个算法的空间复杂度大,

36、则其时间复杂度必定小C、一个算法的时间复杂度大,则其空间复杂度必定小 D、上述三种说法都不对算法的复杂度主要包括时间复杂度和空间复杂度:算法在运行过程中需辅助存储空间的大小称为算法的空间复杂度;算法的时间复杂度是指执行算法所需要的计算工作量,即算法执行过程中所需要的基本运算次数,为了能够比较客观地反映出一个算法的效率,在度量一个算法的工作量时,不仅应该与所使用的计算机、程序设计语言以及程序编制者无关,而且还应该与算法实现过程中的许多细节无关。为此,可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。 故本题答案为D。8. 下列选项中不符合良好程序设计风格的是_。A、源程序要文档化B

37、、数据说明的次序要规范化C、避免滥用goto语句 D、模块设计要保证高耦合、高内聚良好的程序设计风格可以使程序结构清晰合理,使程序代码便于维护,因此,程序设计风格对保证程序的质量很重要。主要应注意和考虑下述一些因素:1、源程序要文档化;2、数据说明的次序要规范化;3、语句的结构应该简单直接,不应该为提高效率而把语句复杂化,避免滥用goto语句。模块设计要保证低耦合、高内聚。 故本题答案为D。9. 设有如下三个关系表 R S T 下列操作中正确的是_。A、T=RS B、RS C、 D、T=RS从图中可以看出,关系T是关系R和关系S的简单扩充,而扩充的符号为×,所以答案为。 故本题答案为

38、C。10. 数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和_。A、编码设计 B、测试阶段 C、运行阶段 D、物理设计数据库设计分为以下6个设计阶段:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、实施阶段及数据库运行和维护阶段。 故本题答案为D。11. 下列运算符不能重载为友元函数的是_。A、= () -> B、+ - + - C、> < >= <= D、+= -= *= /=本题考查的是运算符的重载。 在C+中,可以通过两种方式对运算符进行重载。一种是类成员函数的方式、一种是友元函数的方式。= () ->以及所有的类型转换运算符只能作为成员

39、函数重载,不能重载为友元函数。 故本题答案为A。12. 语句ofstream f("SALARY.DAT",ios_base:app);的功能是建立流对象f,并试图打开文件SALARY.DAT与f关联,而且_。A、若文件存在,将其置为空文件;若文件不存在,打开失败B、若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件C、若文件存在,将文件指针定位于文件首;若文件不存在,打开失败D、若文件存在,打开失败;若文件不存在,建立一个新文件本题考查的是文件流的输出。 ofstream f("SALARY.DAT",ios_base:app);是以io

40、s_base:app方式打开文件,若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件。 故本题答案为B。 13. 有如下程序#include<iostream> using namespace std;class A public: virtual void func1()cout<<"Al" void func2()cout<<"A2"class B:public A public: void func1()cout<<"B1" void func2()cout<&

41、lt;"B2" int main() A*p=new B; p->func1(); p->func2(); return 0;运行此程序,屏幕上将显示输出_。A、B1B2 B、A1A2 C、B1A2 D、A1B2本题考查的是派生类。 派生类B由基类A公有继承而来。调用p->func1();后,执行派生类B的函数void func1();调用p->func2();后,执行基类的函数void func2(),因为虚拟函数是根据对象的实际类型调用,非虚拟函数是根据指针类型调用。故通过指针p调用func2时将直接调用基类中的void func2()。 故本题

42、答案为C。14. if语句的语法格式可描述为: 格式1:if(<条件>)<语句>或 格式2:if(<条件>)<语句1>else<语句2>关于上面的语法格式,下列表述中错误的是_。A、<条件>部分可以是一个if语句,例如if(if(a=0) ) B、<语句>部分可以是一个if语句,例如if() if() C、如果在<条件>前加上逻辑非运算符!并交换<语句1>和<语句2>的位置,语句功能不变D、<语句>部分可以是一个循环语句,例如if()while() 本题考查的是i

43、f语句。 if为关键字,<条件>通常是一个表达式;if子句和else子句可以是任何类型的语句,当然也可以是ifelse语句本身和while语句。 ifelse语句的基本执行过程是:首先计算<条件>的值,如果此值不为0("真"),则执行<语句1>,然后忽略<语句2>,而去执行if语句之后的下一条语句;如果此值为0("假"),则执行<语句2>,然后忽略<语句1>,然后继续执行if语句之后的下一条语句。 故本题答案为A。15. 下列语句中,错误的是_。A、const int buffer=

44、256; B、const double *point;C、int const buffer=256;D、double *const point;本题考查的是符号常量定义。 const int buffer=256; /声明常量buffer const double *point; /声明常量指针*point,*point不可变,但point的值可以改变 int const buffer=256; /声明常量buffer double *const point; /声明的point是常量,*point可变,但point的值不可以改变,point不是外部的,必须在声明初始化常量对象。可改为: do

45、uble aa = 123.45; double *const point = &aa; 故本题答案为D。16. 关于运算符重载,下列表述中正确的是_。A、C+已有的任何运算符都可以重载 B、运算符函数的返回类型不能声明为基本数据类型C、在类型转换符函数的定义中不需要声明返回类型D、可以通过运算符重载来创建C+中原来没有的运算符本题考查的是运算符重载。 运算符重载是针对C+中原有的运算符进行的,不可能通过重载创造出新的运算符,故选项D错误。除了.、.*、->*、:、?:这5个运算符外,其它运算符都可以重载,故选项A错误。运算符函数的返回类型可以声明为基本数据类型,故选项B错误。在

46、重载类型转换符时,由于运算符本身已经表示出返回值类型,因此不需要返回值类型的声明。 故本题答案为C。17. 关于在调用模板函数时模板实参的使用,下列叙述正确的是_。A、对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略B、对于虚拟类型参数所对应的模板实参,如果他们是参数表中的最后的若干参数,则都可以省略C、对于虚拟类型参数所对应的模板实参,若能够省略则必须省略D、对于常规参数所对应的模板实参,任何情况下都不能省略本题考查的是函数模板中模板实参的省略。 对于虚拟类型参数所对应的模板实参,如果从模板函数的实参表中获得的信息已经能够判定其中部分或全部虚拟类型参数,

47、而且它们又正好是参数表中最后的若干参数,则模板实参表中的那几个参数可以省略。反之,对于某个模板实参,如果从模板函数的实参表中无法获得相同的信息,就不能省略;或者虽然能够获得同样的信息,但在它后面还有不能省略的实参,则其自身还是不能省略,故选项A和B错误。对于虚拟类型参数所对应的模板实参,若能够省略可以省略,也可以不省略,故选项C错误。常规参数的信息无法从模板函数的实参表中获得,因此在调用时必须显式的说明。 故本题答案为D。18. 若有下面的函数调用: fun(a+b,3,max(n-1,b)则fun的实参个数是_。 A、3 B、4 C、5 D、6本题考查的是函数的调用。 在C+中,<形参

48、列表>是由逗号分开的,分别说明函数的各个参数。在fun()函数中它包括3个形参,a+b,3和max(n-1,b);当调用一个函数时,实参与形参一对一地匹配,所以实参个数也是3个。 故本题答案为A。19. 下列有关内联函数的叙述中,正确的是_。A、内联函数在调用时发生控制转移 B、内联函数必须通过关键字inline来定义C、内联函数是通过编译器来实现的 D、内联函数函数体的最后一条语句必须是return语句本题考查的是内联函数。 在C+中使用inline关键字来定义内联函数。inline关键字放在函数定义中函数类型之前。不过编译器会将在类的说明部分定义的任何函数都认定为内联函数,即使它们没

49、有inline说明。一个内联函数可以有,也可以没有return语句。内联函数在程序执行时并不产生实际函数调用,而是在函数调用处将函数代码展开执行。内联函数是通过编译器来实现的。 故本题答案为C。20. 在公有继承的情况下,允许派生类直接访问的基类成员包括_。A、公有成员 B、公有成员和保护成员 C、公有成员、保护成员和私有成员 D、保护成员本题考查的是派生类。 派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。此时派生类对基类中各成员的访问能力与继承方式无关,但继承方式将影响基类成员在派生类中的访问控制属性。 故本题答案为B。21. 有如下程序:#include<

50、;iostream> using namespace std;class Obj static int i;public: Obj()i+; Obj()i-; static int getVal()return i;int Obj:i=0;void f()Obj ob2;cout<<ob2.getVal();int main() Obj obl; f(); Obj*ob3=new Obj;cout<<ob3->getVal(); delete ob3;cout<<Obj:getVal(); return 0;程序的输出结果是_。 A、232 B、

51、231 C、222 D、221本题主要考查了C+中类的静态成员。 由于i是类Obj的静态成员,该成员被类的所有实例共享。当定义ob1时,系统自动调用构造函数Obj(),i的值将加1;调用函数f()时,在定义ob2时系统会自动调用构造函数Obj(),i的值将再加1;调用ob2.getVal();后,将i的值输出,输出值为2;当调用函数f()即将结束时,系统自动调用析构函数Obj(),i的值将减1;当定义ob3时,系统自动调用构造函数Obj(),i的值将加1,调用cout<<ob3->getVal();后,将i的值输出,输出值为2;调用delete ob3后将执行Obj的析构函数

52、Obj(),执行后,i的值将减1,Obj:getVal()为类的一个静态成员函数,其作用是返回私有静态成员变量i的值1。 故本题答案为D。22. 下列有关继承和派生的叙述中,正确的是_。A、如果一个派生类私有继承其基类,则该派生类中的成员不能访问基类的保护成员B、派生类的成员函数可以访问基类的所有成员 C、基类对象可以赋值给派生类对象D、如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类本题考查的是拷贝构造函数。 拷贝构造函数通常在以下3种情况下会被调用: (1)用类的一个已知的对象去初始化该类的另一个正在创建的对象。 (2)采用传值调用方式时,对象作为函数实参传递给函数形参。 (3

53、)对象作为函数返回值。 故本题答案为B。23. 下列情况中,不会调用拷贝构造函数的是_。A、用一个对象去初始化同一类的另一个新对象时B、将类的一个对象赋值给该类的另一个对象时C、函数的形参是类的对象,调用函数进行形参和实参结合时D、函数的返回值是类的对象,函数执行返回调用时本题考查的是拷贝构造函数。 拷贝构造函数通常在以下3种情况下会被调用: (1)用类的一个已知的对象去初始化该类的另一个正在创建的对象。 (2)采用传值调用方式时,对象作为函数实参传递给函数形参。 (3)对象作为函数返回值。 故本题答案为B。24. 有如下程序#include<iostream> #include&

54、lt;iomanip> using namespace std;int main() cout<<setprecision(3)<<fixed<<setfill('*')<<setw(8); cout<<12.345<<_<<34.567; return 0;若程序的输出是: *12.345*34.567则程序中下划线处遗漏的操作符是_。A、setprecision B、fixed C、setfill('*') D、setw(8)本题考查的是输入输出宽度的控制和输出精度的控

55、制。 setw(int n);设置输入输出的宽度。 setprecision(int n);设置浮点数的精度(有效位数或小数位数)。 setfill(char c);设置填充字符。 由程序可以看出,本题设置小数的输出宽度为8,小数位数为3。输出数据时,如果数据宽度小于8,则空闲的位置用*填充。 故本题答案为D。25. 有如下的运算符重载函数定义:double operator +(int i,int k)return double(i+k);但定义有错误,对这个错误最准确的描述是_。A、+只能作为成员函数重载,而这里的+是作为非成员函数重载的B、两个int型参数的和也应该是int型,而这里将+

56、的返回类型声明为doubleC、没有将运算符重载函数声明为某个类的友元D、C+已经提供了求两个int型数据之和的运算符+,不能再定义同样的运算符本题考查的是运算符的重载。 在C+中可以对用户自定义类的运算符进行重载,但不能诸如int,char,double等内置类型运算符进行重载。 故本题答案为D。26. 有如下程序#include<iostream> using namespace std; class Base protected: Base()cout<<'A' Base(char c)cout<<c;class Derived:pub

57、lic Basepublic: Derived(char c)cout<<c;int main() Derived d1('B'); return 0; 执行这个程序屏幕上将显示输出_。 A、B B、BA C、AB D、BB本题考查的是派生的构造函数和基类的构造函数的调用顺序。 建立派生类对象时,构造函数的执行顺序如下: (1)执行基类的构造函数。 (2)执行成员对象的构造函数。 (3)执行派生类的构造函数。 派生类Derived由基类Base公有派生而来。在派生类构造函数声明时系统会自动调用基类的缺省构造函数。调用Derived d1('B');后

58、,执行类Derived的构造函数的Derived(char c)定义,系统会自动调用基类的缺省构造函数Base(),输出字母A;再执行派生类的构造函数Derived(char c),输出字母B。 故本题答案为C。27. 关于关键字class和typename,下列表述中正确的是_。A、程序中的typename都可以替换为class B、程序中的class都可以替换为typenameC、在模板形参表中只能用typename来声明参数的类型D、在模板形参表中只能用class或typename来声明参数的类型本题考查的是模板形参。 模板形参分为两种类型:虚拟类型参数和常规参数。虚拟类型参数须用typename或class定义。常规参数用具体的类型修饰符(如int、double、char*等)定义,故选项C和D错误。在定义模板时,关键字typename与class可以互相交换,但在定义类时,只能使用class。typename仅仅用于定义模板,故程序中所有的typename都可以替换成class,但对于用于类定义的class不能使用typename来替换。 故本题答案为A。28. 在一个派生类对象结束其生命周期时_。A、先调用派生类的析构函数后调用基类的析构函数B、先调用基类的析构函数后调用派生类的析构函数C、如果基类没有定义析构函数,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论