1、二级 C+-212 及答案解析(总分:65.50,做题时间:90 分钟)一、选择题(总题数:40,分数:65.50)1.在数据管理技术发展的三个阶段中,数据共享最好的是_。(分数:1.00)A.人工管理阶段B.文件系统阶段C.数据库系统阶段D.三个阶段相同2.下列选项中,正确的 C+表达式是_。(分数:2.00)A.a+b=b+eB.xyz+C.www+9D.a33.下面关于运算符重载的描述错误的是_。(分数:2.50)A.运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算符的语法结构B.不是所有的运算符都可以进行重载C.运算符函数的调用必须使用关键字 operatorD.在
2、 C+语言中不可通过运算符重载创造出新的运算符4.每个 C+程序中都必须有且仅有一个_。(分数:2.50)A类B.预处理命令C.主函数D.语句5.面向对象程序设计思想的主要特征中不包括(分数:2.00)A.继承性B.功能分解,逐步求精C.封装性和信息隐藏D.多态性6.有如下函数模板: template typename T, typename U T cast(U u) return u; 其功能是将 U 类型数据转换为 T 类型数据。已知 i 为 int 型变量,下列对模板函数 cast 的调用中正确的是_。(分数:1.00)A.cast(i);B.cast(i);C.castchar*,
3、int(i);D.castdouble, int(i);7.软件详细设计产生的图如下: (分数:2.50)A.N-S 图B.PAD 图C.程序流程图D.E-R 图8.下面程序的输出结果是_。 #includeiostream.h #includestring.h void main() char p110,p210; strcpy(p1,“abc“); strcpy(p2,“ABC“); char str50=“xyz“; strcpy(str+2,strcat(p1,p2); coutstr; (分数:1.00)A.xyzabcABCB.zabcABCC.xyabcABCD.yzabcABC
4、9.有如下程序: #includeiostream using namespace std; void fun(int i) cout“/int i“; void fun(char e)cout“/char c“; int main() fun(0); fun(“0“); retum 0; 运行后的输出结果是_。(分数:1.00)A./int i/int iB./int i/char cC./char c/int iD./char c/char c10.设有定义 charstr80以下不能将输人数据 nrst/nsecond/CR)读取到数组 str 的语句是 _ 。(分数:2.00)A.ci
5、n.get(str,strlen(str);B.cin.getline(str,strlen(str);C.cinstr;D.dn.read(str,strlen(str);11.在对象方法中,一个对象请求另一个对象为其服务的方式是通过发送_来实现。(分数:1.00)A.调用语句B.命令C.中令D.消息12.有如下类定义: class MyClass public: _ private: int data; ; 若耍为 Myclass 类重载流输入运算符,使得程序中可以“cinobj;”形式输入 MyClass 类的对象obj,则横线处的声明语句应为_。(分数:1.00)A.friend is
6、tream operator(istream is,MyClass-a);B.friend istreamoperator(istream is,MyClassa);C.istreamoperator(istreamis,MyClassa);D.istrcamoperator(istreamis,Myclass a);13.若有如下程序: #includeiostream using narnespace std; class TestClass public: void who()cout“TestClass“endl; ; class TestClassl: public TestClas
7、s public: void who()cout“TestClass1“endl; int main() TestClass*p; TcstClass1 obj1; p=obj1; p-who(); return 0; 则该程序运行后的输出结果是_。(分数:1.00)A.TestClasslB.TestClassC.0D.无输出14.计算数列第 n 项的函数定义如下: int fa(int n) if(n=0) return 0; else if(n=1) return 1; else return fa(n-1)+fa(n-2); 若执行函数调用表达式 fa(3)时,返回的函数值为_。(分数
8、:1.00)A.0B.1C.2D.315.以下正确的描述为(分数:2.00)A.每个 C+语言程序必须在开头用预处理命令:B.预处理命令必须位于 C+源程序的首部C.在 C+语言中预处理命令都以“#”开头D.C+语言的预处理命令只能实现宏定义和条件编译的功能16.VisualFoxPro 是一种 _ 。(分数:1.00)A.数据库管理系统软件B.操作系统软件C.文字处理软件D.CAD 软件17.已知类 Time 的定义如下: class Time/时间类 private: int hour, minute, second;/时、分、秒 public: Time(int h,int m, int
9、 s):hour(h),minute(m),second(s) _ switch(index) case0: return hour; case 1: return minute; default: return second; ; 其中横线处应为下标访问运算符的重载函数的函数头,横线处应填入的代码是(分数:2.50)A.int ; class Derived1:public Base; class Derived2:protected Base; int main() Derived1 d1; Derived2 d2; d1.data=0;/ d2.data=0;/ return 0; 下列
10、关于程序编译结果的描述中,正确的是_。(分数:1.00)A.皆无编译错误B.有编译错误,无编译错误C.无编译错误,有编译错误D.皆有编译错误19.对于算法的每一步,指令必须是可执行的。算法的 _ 要求算法在有限步骤之后能够达到预期的目的。(分数:2.00)A.可行性B.有穷性C.正确性D.确定性20.下面有关类模板的说法中不正确的是 _ 。(分数:2.00)A.类模板的成员函数都是模板函数B.类模板本身在编译中不会生成任何代码C.类模板只是虚拟类型的参数D.用类模板定义一个对象时,不能省略实际参数21.下列不属于软件工程过程的基本活动的是 _ 。(分数:1.00)A.软件规格说明B.软件开发C
11、.软件确认D.软件需求分析22.运算符重载是对已有的运算符赋予多重含义,因此_。(分数:2.00)A.可以对基本类型(如 int 类型)的数据,重新定义“+”运算符的含义B.可以改变一个已有运算符的优先级和操作数个数C.只能重载 C+中已经有的运算符,不能定义新运算符D.C+中已经有的所有运算符都可以重载23.数据库系统的三级模式不包括_。(分数:1.00)A.概念模式B.内模式C.外模式D.数据模式24.单个用户使用的数据视图的描述称为(分数:1.00)A.外模式B.概念模式C.内模式D.存储模式25.有如下函数模板定义: templateclass T T func(T x,T y)ret
12、urn x*x+y*y; 在下列对 func 的调用中,错误的是_。(分数:2.00)A.func(3,5);B.func(3.0,5.5);C.func(3,5.5);D.funcint(3,5.5);26.表示在输出时显示小数位,和在文件输入时判断文件尾的函数分别是 _ 。(分数:1.00)A.showbase()和 eof()B.showpoint()和 eof()C.showpoint()和 bad()D.showpoint()和 good()27.若有定义语句“int i=2,j=3;”,则表达式 i/j 的结果是_。(分数:2.00)A.0B.0.7C.0.66667D.0.666
13、6666728.两个或两个以上模块之间联系的紧密程度称为_。(分数:1.00)A.耦合性B.内聚性C.复杂性D.数据传输特性29.下面程序的运行结果为 #includeiostream.h void main( ) char a=“3“; switch(a) case“3“: cout “3“; case“2“: cout “2“;break; default: cout “1“; (分数:1.00)A.3B.321C.31D.3230.下列关于运算符重载的叙述中,错误的是_。(分数:1.00)A.有的运算符可以作为非成员函数重载B.所有的运算符都可以通过重载而被赋予新的含义C.不得为重载的运
14、算符函数的参数设置默认值D.有的运算符只能作为成员函数重载31.对于一个类定义,下列叙述中错误的是_。(分数:1.00)A.如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数B.如果没有定义缺省的构造函数,编译器一定将生成一个缺省的构造函数C.如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数D.如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数32.有如下的运算符重载函数定义: double operator+(int i,int k)return double(i+k); 但定义有错误,对这个错误最准确的描述是_。(分数:3.00)A.+只能作为成员函
15、数重载,而这里的+是作为非成员函数重载的B.两个 int 型参数的和也应该是 int 型,而这里将+的返回类型声明为 doubleC.没有将运算符重载函数声明为某个类的友元D.C+已经提供了求两个 int 型数据之和的运算符+,不能再定义同样的运算符33.下列关于运算符重载的描述中,正确的是_。(分数:2.00)A.运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符B.一元运算符只能作为成员函数重载C.二元运算符重载为非成员函数时,参数表中有一个参数D.C+中可以重载所有的运算符34.有如下程序: #includeiostream using namespace std; class
16、 Toy public: Toy(char*_n)strcpy(name,_n);count+; Toy()count-; char*GetName()return name; static int getCount()return count; private: char name10; static int count; ; int Toy:count=0; int main() Toy t1(“Snoopy“),t2(“Mickey“),t3(“Barbie“); coutt1.getCount()endl; return 0; 运行时的输出结果是_。(分数:2.50)A.1B.2C.3
17、D.运行时出错35.判断字符型变量 ch 是否为大写英文字母,应使用表达式 _ 。(分数:2.00)A.ch=“A“ class Media public: void Name(); void Show(); protected: int page; ; class Book:private Media public: void Print()coutpageendl; void Show()Media:Show(); / ; int main() Book Bible; Bible.Name(); / Bible.Print(); / Bible.Show(); / return 0; 编译
18、时有错误的是_。(分数:2.50)A.语句B.语句C.语句D.语句40.对于模板定义关键字 class 和 typename 说法不正确的是_。(分数:1.00)A.程序中的 class 并不能都替换为 typenameB.class 和 typename 都可互相替换C.程序中的 typename 都能替换为 classD.程序中的部分 class 可以替换为 typename二级 C+-212 答案解析(总分:65.50,做题时间:90 分钟)一、选择题(总题数:40,分数:65.50)1.在数据管理技术发展的三个阶段中,数据共享最好的是_。(分数:1.00)A.人工管理阶段B.文件系统阶
19、段C.数据库系统阶段 D.三个阶段相同解析:解析 数据管理发展至今已经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。其中最后一个阶段结构简单,使用方便逻辑性强物理性少,在各方面的表现都最好,一直占据数据库领域的主导地位,所以选择 C。2.下列选项中,正确的 C+表达式是_。(分数:2.00)A.a+b=b+eB.xyz+C.www+9D.a3 解析:3.下面关于运算符重载的描述错误的是_。(分数:2.50)A.运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算符的语法结构B.不是所有的运算符都可以进行重载C.运算符函数的调用必须使用关键字 operator D.在
20、 C+语言中不可通过运算符重载创造出新的运算符解析:解析 例如“:”运算符就不能被重载;通过重载可以创造新的运算方式,但是不能臆造新的运算符;定义的时候必须使用关键字 operator,而调用时可直接使用运算符。4.每个 C+程序中都必须有且仅有一个_。(分数:2.50)A类B.预处理命令C.主函数 D.语句解析:解析 每个 C+程序中都要有且仅有一个主函数,该函数是程序的入口,而语句、预处理命令和函数及类在程序中都可以有多个。5.面向对象程序设计思想的主要特征中不包括(分数:2.00)A.继承性B.功能分解,逐步求精 C.封装性和信息隐藏D.多态性解析:解析 C+是一种面向对象的程序设计语言
21、,它充分支持面向对象思想中的 3 个主要特征:封装性,继承性、多态性。B 选项所描述是结构化程序设计的思想。6.有如下函数模板: template typename T, typename U T cast(U u) return u; 其功能是将 U 类型数据转换为 T 类型数据。已知 i 为 int 型变量,下列对模板函数 cast 的调用中正确的是_。(分数:1.00)A.cast(i);B.cast(i);C.castchar*, int(i);D.castdouble, int(i); 解析:解析 本题考查函数模板的基本运用,属于基础知识。函数模板实际上是建立一个通用函数,其函数类型
22、和形参类型不具体指定,用一个虚拟的类型代表,这个通用函数就是函数模板。函数模板可以设定默认参数,这样在调用模板函数时就可以省略实参,函数模板的实例就是一个函数的定义。所以本题答案为 D。7.软件详细设计产生的图如下: (分数:2.50)A.N-S 图B.PAD 图C.程序流程图 D.E-R 图解析:解析 程序流程图基本图符有:控制流(用箭头表示)、加工步骤(用方框表示)、逻辑条件(用菱形表示)。有 5 种控制结构:顺序、选择、多分支选择、后判断重复型和先判断重复型。题目中为选择结构的程序流程图。8.下面程序的输出结果是_。 #includeiostream.h #includestring.h
23、 void main() char p110,p210; strcpy(p1,“abc“); strcpy(p2,“ABC“); char str50=“xyz“; strcpy(str+2,strcat(p1,p2); coutstr; (分数:1.00)A.xyzabcABCB.zabcABCC.xyabcABC D.yzabcABC解析:解析 该函数的调用方式是 strcpy(字符数组,字符串),其中字符串可以是串常量,也可以是字符数组。函数的功能是将字符串完整地复制到字符数组中,字符数组中原有内容被覆盖。使用该函数时注意:字符数组必须定义得足够大,以便容纳复制过来的字符串,复制时,连同
24、结束标志/0 一起复制;连接前两个字符串都有结束标志“/0“,连接后“符数组“中存储的字符串的结束标志“/0“被舍弃,只在目标串的最后保留一个“/0“;不能用赋值运算符=将一个字符串直接赋值给一个字符数组,只能用strcpy()函数来处理,strcat(字符数组,字符串)的功能是把字符串连接到字符数组中的字符串尾端,并存储于字符数组中,字符数组中原来的结束标志,被字符串的第一个字符覆盖,而字符串在操作中未被修改。9.有如下程序: #includeiostream using namespace std; void fun(int i) cout“/int i“; void fun(char e
25、)cout“/char c“; int main() fun(0); fun(“0“); retum 0; 运行后的输出结果是_。(分数:1.00)A./int i/int iB./int i/char c C./char c/int iD./char c/char c解析:解析 本题考查的是重载函数的匹配。在 main 函数中,fun(0)中的参数是整数 0,所以最佳匹配函数是 fun(int i),即调用函数 fun(int i),输出“/inti”;同样,fun(“0“)中的参数是字符“0“,最佳匹配函数是 fun(char c),所以调用函数 fun(char c),输出”/charc
26、”,选项 B 正确;答案为 B 选项。10.设有定义 charstr80以下不能将输人数据 nrst/nsecond/CR)读取到数组 str 的语句是 _ 。(分数:2.00)A.cin.get(str,strlen(str);B.cin.getline(str,strlen(str);C.cinstr;D.dn.read(str,strlen(str); 解析:解析 本题考查 cin 流对象的几种成员函数 get,getline,read 及流提取符的使用规则。11.在对象方法中,一个对象请求另一个对象为其服务的方式是通过发送_来实现。(分数:1.00)A.调用语句B.命令C.中令D.消息
27、 解析:解析 在面向对象方法中,对象之间通过消息进行通信。消息中只包含传递者的要求,它告诉接受者需要做哪些处理,但并不指示接受者应该怎么完成这些处理,接受者独立决定采用什么方式完成所需的处理。12.有如下类定义: class MyClass public: _ private: int data; ; 若耍为 Myclass 类重载流输入运算符,使得程序中可以“cinobj;”形式输入 MyClass 类的对象obj,则横线处的声明语句应为_。(分数:1.00)A.friend istream operator(istream is,MyClass-a); B.friend istreamop
28、erator(istream is,MyClassa);C.istreamoperator(istreamis,MyClassa);D.istrcamoperator(istreamis,Myclass a);解析:解析 重载输入、输出的声明必须是友元传入的对象必须是地址,否则操作对象的值是没有意义的, 下面是重载输入运算符示例:(Dew C+) #includecstdlib #includeiostream using namespace std; class MyClass public: int dala; public: MyClass(int data); friend istrc
29、amoperator(istreamis,MyClassobj); ; MyClass:MyClass(int data) data=data; istreamoperator(istreamis,MyClassobj) isobj.data; return is; int main(void) MyClass obj (12); cinobj; coutendl; coutobj.data; system(“PAUSE“); return EXIT SUCCESS; 13.若有如下程序: #includeiostream using narnespace std; class TestCla
30、ss public: void who()cout“TestClass“endl; ; class TestClassl: public TestClass public: void who()cout“TestClass1“endl; int main() TestClass*p; TcstClass1 obj1; p=obj1; p-who(); return 0; 则该程序运行后的输出结果是_。(分数:1.00)A.TestClassl B.TestClassC.0D.无输出解析:解析 程序中的 TestClassl 为 TestClass 的派生类,主函数 maln 中定义 TestC
31、lass 对象*p,TestClass1 对象 obj1,然后 p 引用 obj1,执行 p-who()则是调用基类中的 who 函数,输出TestClass。14.计算数列第 n 项的函数定义如下: int fa(int n) if(n=0) return 0; else if(n=1) return 1; else return fa(n-1)+fa(n-2); 若执行函数调用表达式 fa(3)时,返回的函数值为_。(分数:1.00)A.0B.1C.2 D.3解析:解析 本题考查的是递归函数。函数 fa 是一个递归函数,递归退出条件为 n=0 或 1,否则为fa(n-1)+fa(n-2)。
32、所以 fa(3)展开如下:fa(3)=fa(2)+fa(1)=fa(1)+fa(0)+fa(1)=1+0+1=2。答案为 C 选项。15.以下正确的描述为(分数:2.00)A.每个 C+语言程序必须在开头用预处理命令:B.预处理命令必须位于 C+源程序的首部C.在 C+语言中预处理命令都以“#”开头 D.C+语言的预处理命令只能实现宏定义和条件编译的功能解析:解析 本题中,A 和 B 的描述是一样的,故可以捧除。在 C+中,建议用 inline 函数取代 C 语言中的宏定义功能。16.VisualFoxPro 是一种 _ 。(分数:1.00)A.数据库管理系统软件 B.操作系统软件C.文字处理
33、软件D.CAD 软件解析:解析 Visual FoxPro 属于小型数据库管理系统软件,它是微软的产品,只具备数据库管理系统的一些简单功能。17.已知类 Time 的定义如下: class Time/时间类 private: int hour, minute, second;/时、分、秒 public: Time(int h,int m, int s):hour(h),minute(m),second(s) _ switch(index) case0: return hour; case 1: return minute; default: return second; ; 其中横线处应为下标
34、访问运算符的重载函数的函数头,横线处应填入的代码是(分数:2.50)A.int ; class Derived1:public Base; class Derived2:protected Base; int main() Derived1 d1; Derived2 d2; d1.data=0;/ d2.data=0;/ return 0; 下列关于程序编译结果的描述中,正确的是_。(分数:1.00)A.皆无编译错误B.有编译错误,无编译错误C.无编译错误,有编译错误 D.皆有编译错误解析:解析 本题考查公用继承和保护继承对基类成员的访问属性。在公用继承中,基类的公用成员和保护成员在派生类中保
35、持原有访问属性,其私有成员仍为基类私有。在受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有。本题中 Derived1 公用继承 Base,所以编译正确,Derived2 保护继承 Base,所以编译不正确。19.对于算法的每一步,指令必须是可执行的。算法的 _ 要求算法在有限步骤之后能够达到预期的目的。(分数:2.00)A.可行性 B.有穷性C.正确性D.确定性解析:20.下面有关类模板的说法中不正确的是 _ 。(分数:2.00)A.类模板的成员函数都是模板函数B.类模板本身在编译中不会生成任何代码C.类模板只是虚拟类型的参数 D.用类模板定义一个对象时,不
36、能省略实际参数解析:解析 C+中类模板的声明格式为 template模板形参表声明类声明,并且类模板的成员函数都是模板函数。21.下列不属于软件工程过程的基本活动的是 _ 。(分数:1.00)A.软件规格说明B.软件开发C.软件确认D.软件需求分析 解析:解析 软件工程过程是把输入转化为输出的一组彼此相关的资源和活动。软件工程的过程是将软件工程的方法和工具综合起来,以达到合理、及时地进行计算机软件开发的目的。它的基本活动包括软件规格说明、软件开发、软件确认、软件演进。22.运算符重载是对已有的运算符赋予多重含义,因此_。(分数:2.00)A.可以对基本类型(如 int 类型)的数据,重新定义“
37、+”运算符的含义B.可以改变一个已有运算符的优先级和操作数个数C.只能重载 C+中已经有的运算符,不能定义新运算符 D.C+中已经有的所有运算符都可以重载解析:解析 此题考查的是运算符重载。运算符重载是针对 C+语言原有的运算符进行的,并不能创造新的运算符。23.数据库系统的三级模式不包括_。(分数:1.00)A.概念模式B.内模式C.外模式D.数据模式 解析:解析 数据库系统的三级模式是概念模式、外模式和内模式,所以选择 D。24.单个用户使用的数据视图的描述称为(分数:1.00)A.外模式 B.概念模式C.内模式D.存储模式解析:解析 选项 A)正确,外模式是用户的数据视图,也就是用户所见
38、到的数据模式;选项 B)不正确,全局数据视图的描述称为概念模式,即数据库中全部数据的整体逻辑结构的描述;选项 C)不正确,物理存储数据视图的描述称为内模式,即数据库在物理存储方面的描述;选项 D)不正确,存储模式即为内模式。25.有如下函数模板定义: templateclass T T func(T x,T y)return x*x+y*y; 在下列对 func 的调用中,错误的是_。(分数:2.00)A.func(3,5);B.func(3.0,5.5);C.func(3,5.5); D.funcint(3,5.5);解析:解析 此题考查的是函数模板的使用。引用模板函数和引用一般函数在语法形
39、式上基本相同。需要注意的是说明一个函数模板后,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中的对应形参。本题 C 选项中,编译系统从第一个参数“3”获得信息“int”和从第二个参数获得信息“double”两者矛盾,错误;A、B 选项正确;D 选项中,函数名后的int是模板实参表,编译系统会将 double 型的形参“5.5”自动转化成 int 类型。26.表示在输出时显示小数位,和在文件输入时判断文件尾的函数分别是 _ 。(分数:1.00)A.showbase()和 eof()B.showpoint()和 eof() C.showpoint()和 bad()D
40、.showpoint()和 good()解析:27.若有定义语句“int i=2,j=3;”,则表达式 i/j 的结果是_。(分数:2.00)A.0 B.0.7C.0.66667D.0.66666667解析:解析 由于变量 i、j 都是整型变量,所以两者相除所得的商也是整型数据。28.两个或两个以上模块之间联系的紧密程度称为_。(分数:1.00)A.耦合性 B.内聚性C.复杂性D.数据传输特性解析:解析 耦合性是模块间互相连接的紧密程度的度量,取决于各个模块之间接口的复杂度、调用方式以及哪些信息通过接口。29.下面程序的运行结果为 #includeiostream.h void main( )
41、 char a=“3“; switch(a) case“3“: cout “3“; case“2“: cout “2“;break; default: cout “1“; (分数:1.00)A.3B.321C.31D.32 解析:解析 本题主要考查的是 switch 语句的使用,在第一个 case 处,因为满足条件所以输出字符 3,但这个分支没有 break 语句终止,所以会继续执行下面的分支语句,即输出字符 2,这时出现 break语句,结束整个语句,即输出 32。30.下列关于运算符重载的叙述中,错误的是_。(分数:1.00)A.有的运算符可以作为非成员函数重载B.所有的运算符都可以通过重
42、载而被赋予新的含义 C.不得为重载的运算符函数的参数设置默认值D.有的运算符只能作为成员函数重载解析:解析 重载运算符的规则如下:C+不允许用户自己定义新的运算符,只能对已有的 c+运算符进行重载;c+十不能重载的运算符只有 5 个;重载不能改变运算符运算对象的个数;重载不能改变运算符的优先级和结合性;重载运算符的函数不能有默认的参数;重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是 C+的标准类型。所以答案为B。31.对于一个类定义,下列叙述中错误的是_。(分数:1.00)A.如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数B.如果没有定义
43、缺省的构造函数,编译器一定将生成一个缺省的构造函数 C.如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数D.如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数解析:解析 本题考查构造函数和复制构造函数,如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数,如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数。如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数。32.有如下的运算符重载函数定义: double operator+(int i,int k)return double(i+k); 但定义有错误,对这个错误最准确的描
44、述是_。(分数:3.00)A.+只能作为成员函数重载,而这里的+是作为非成员函数重载的B.两个 int 型参数的和也应该是 int 型,而这里将+的返回类型声明为 doubleC.没有将运算符重载函数声明为某个类的友元D.C+已经提供了求两个 int 型数据之和的运算符+,不能再定义同样的运算符 解析:解析 此题考查的是运算符的重载。C+语言规定,不能作为非成员函数重载的运算符有=、()、-以及所有的类型转换运算符,故选项 A 错误;运算符重载对返回值类型没有限制,故选项 B 错误;C+并不强制要求非成员重载的运算符一定是某个类的友元,所以 C 选项错误;题目中重载的“+”运算符的两个参数都是
45、 int 类型,而 C+已经提供了求两个 int 型数据之和的运算符+,编译器无法区分应该调用哪一个,所以应该选择 D 选项。33.下列关于运算符重载的描述中,正确的是_。(分数:2.00)A.运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符 B.一元运算符只能作为成员函数重载C.二元运算符重载为非成员函数时,参数表中有一个参数D.C+中可以重载所有的运算符解析:解析 此题考查的是运算符的重载。运算符重载为成员函数时,形参个数一般为运算符元数减1;重载为非成员函数时,形参个数一般和运算符元数相等。所以二元运算符重载为非成员函数时,参数表中应有两个参数,C 选项错误;运算符重载为成员
46、函数,若参数表中无参数,重载的是一元运算符,选项 A 正确;一元运算符中,“-”(取负)、“+”、“-”等均可重载为成员函数;C+语言中,“.”、“.*”、“-*”、“:”、“?:”五个运算符不能重载。34.有如下程序: #includeiostream using namespace std; class Toy public: Toy(char*_n)strcpy(name,_n);count+; Toy()count-; char*GetName()return name; static int getCount()return count; private: char name10;
47、static int count; ; int Toy:count=0; int main() Toy t1(“Snoopy“),t2(“Mickey“),t3(“Barbie“); coutt1.getCount()endl; return 0; 运行时的输出结果是_。(分数:2.50)A.1B.2C.3 D.运行时出错解析:35.判断字符型变量 ch 是否为大写英文字母,应使用表达式 _ 。(分数:2.00)A.ch=“A“ class Media public: void Name(); void Show(); protected: int page; ; class Book:private M