第一篇:C++题
1、_____重载 ___不是面向对象系统所包含的要素。2、___构造函数_____的功能是对对象进行初始化。
3、在下列关键字中,用以说明类中私有成员的是_private___。
4、C++对C语言作了很多改进,(引进了类和对象的概念)使得C语言发生了质变,即从面向过程变成面向对象。
5、面向对象程序设计将数据与_对数据的操作_放在一起,作为一个相互依存、不可分割的整体来处理。6、已知f1(int)是类A 的公有成员函数,p 是指向成员函数f1()的指针,采用__ p=&A::f1___是正确的。
7、在说明:const char *ptr;中,ptr应该是___指向字符的常量指针_____。判断:
1、空类就是没有名字的类。错
2、面向对象系统的封装性是一种信息隐藏技术,目的在于将对象的使用者与设计者分开,使用者不必知道对象行为实现的细节,只需用设计者提供的协议命令对象去做即可。错
3、引用类型和指针类型作为函数的形式参数时,对调用函数的实际参数的要求是一样的,均是地址。
4、对象数组在创建时要求构造函数不能有任何参数。错1.___静态数据成员_____是一个类的多个对象共享的。
2.下列静态数据成员的特性中,D)_静态数据成员不是所有对象所共有的_是错误的.A)说明静态数据成员时前边要加关键字static来修饰 B)静态数据成员在类体外进行初始化
C)引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符 3.静态成员的值对每个对象都是一样的,它的值是可以更新的。()4.由于数据隐藏的需要,静态数据成员通常被说明为(保护的)
5.下面对静态数据成员的描述中,正确的是(静态数据成员是类的所有对象共享的数据)1.允许访问类的所有对象的私有成员,公有成员和保护成员的是(友元函数)2.类A是类B的友元,类B是类C的友元,则__D)__是正确的.A)类B是类A的友元B)类C是类A的友元C)类A是类C的友元D)以上都不对 3.一个类的友元函数能够访问该类的___所有成员___4.类模板的模板参数____D)______.A)只可作为数据成员的类型B)只可作为成员函数的返回类型 C)只可作为成员函数的参数类型D)以上三者皆可
5.一个(类模板)允许用户为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数和返回值可以取任意数据类型。
6.类模板的使用实际上是将类模板实例化成一个具体的___类_____。1 关于类和对象的说法不正确的是()C A类是对象的类,对象是类的对象
B系统不为类分配内存空间,而为对象分配内存空间 C如果把人看作动物,那么细菌也是动物
D类可以看作数据类型,对象也可以叫做对象的实体、实例等类是()的集合,分类的依据是()具有相同属性和服务的一组对象抽象 1对象的封装就是(可进可出,但是外界不能干涉内部的处理过程)C 2关于类的继承不正确的是()C
A引入类的继承目的就是为了代码重用,提高编程效率B子女有父母的特征是类的继承 C子继父产业是类的继承
D子类可以全部继承父类的属性和服务,也可部分继承父类的属性和服务 下列关于运算符重载的描述中 运算符重载不可以改变语法结构
友元重载运算符obj1〉obj2被C++编译器解释为(operator>(obj1,obj2))。下列运算符中,A)?:运算符在C++中不能重载。
继承具有___传递性_,即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员。派生类的对象对它的基类成员中___公有继承的公有成员_____是可以访问的。
在多继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规则__部分相同,部分不同_。下列对派生类的描述中,__D)_____是错误的。
A)一个派生类可以作另一个派生类的基类B)派生类至少有一个基类 C)派生类的成员除了它自己的成员外,包含了它的基类的成员 D)派生类中继承的基类成员的访问权限到派生类保持不变对基类和派生类的关系描述中,____B)______是错误的。A)派生类是基类的具体化B)派生类是基类的子集 C)派生类是基类定义的延续 D)派生类是基类的组合派生类的构造函数的成员初始化列表中,不能包含__C)基类的子对象初始化____。A)基类的构造函数B)派生类中子对象的初始化
C)基类的子对象初始化D)派生类中一般数据成员的初始化
下列对派生类的描述中,错误的是(D.)
A. 派生类的缺省继承方式是PRIVATEB. 派生类至少有一个基类
C. 一个派生类可以作为另一个派生类的基类D. 派生类只继承了基类的公有成员和保密成员下列说法中错误的是(D.)
A. 公有继承时基类中的public成员在派生类中是public的B. 公有继承时基类中的private成员在派生类中是不可直接访问的 C. 私有继承时基类中的public成员在派生类中是private的 D. 私有继承时基类中的public成员在派生类中是protected的若派生类的成员函数不能直接访问基类中继承来的某个成员,则该成员一定是基类中的私有成员)实现运行时的多态性要使用___虚函数__。
关于函数的描述中,A)派生类的虚函数与基类的虚函数具有不同的参数个数和类型__是正确的。关于动态联编的下列叙述中,__A)__是错误的。
A)动态联编是以虚函数为基础的B)动态联编调用虚函数操作是指向对象的指针或引用 C)动态联编是在运行时确定所调用的函数代码的D)动态联编是在编译时确定操作函数的用于类中虚成员函数说明的关键字()
A.virtualB.publicC.protectedD.private编译时的多态性通常使用()获得。
A.继承B.虚函数C.重载函数D.析构函数
若要强制C++对虚函数的调用使用静态联编,则在调用中对该函数使用(指针)C++有(.2)种联编。
虚函数必须是类的(成员函数)
不能说明为虚函数的是(构造函数)
不同的对象可以调用相同名称的函数,并可导致完全不同的行为的现象称为(.多态性)若析构函数是虚函数,则delete对析构函数的调用采用(重载函数)
若派生类中没有对基类的虚函数进行重定义,则它继承基类中的(成员函数)多态调用指(借助于指向对象的基类指针或引用调用一个纯虚函数)动态联编所支持的多态性称为(运行时的多态性)下列描述中,()是抽象类的特性。
A)可以说明虚函数B)可以定义友元函数C)可以进行构造函数重载D)不能说明其对象(纯虚函数)是一个在基类中说明的虚函数,它在该基类中没有定义,但要求任何派生类中的可访问性的规定是相同的。如果一个类至少有一个纯虚函数,那么就称该类为(抽象类)。下面哪个基类中的成员函数表示纯虚函数(virtual void vf()=0)
关于纯虚函数,下列表述正确的是(纯虚函数是给出实现版本(即无函数体定义)的虚函数)下面哪个基类中的成员函数表示纯虚函数()
A.virtual void vf(int)B.void vf(int)=0 C.virtual void vf()=0D.virtual void vf(int)||
关于纯虚函数,下列表述正确的是(纯虚函数是给出实现版本(即无函数体定义)的虚函数)1 下列关于对象的描述不正确的是(A)A对象只能描述有形的东西
B对象具有属性和服务两个主要因素
C现实世界中的一切事物都可以看作对象,但只有在具体的系统中加以论述才有实际的意义
D对象的属性是对象的静态特征,服务是动态特征,并且对象的属性只能由本对象的服务来操作 2 构成对象的两个主要因素是(属性)和(服务),其中(服务)属于动态属性,(属性)属于静态属性,(属性)只能由(服务)来操作。关于多继承二义性的描述中,错误的是C A.一个派生类的基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性B.解决二义性的最常用的方法是对成员名的限度法C.基类和派生类同时出现的同名函数,也存在二义性问题D.一个派生类是从俩个基类派生出来的,而这俩个基类有又以个共同的基类,对该基类成员进行访问时,可能出现二义性。设置虚基类的目的是 消除二义性 虚基类声明 class B virtual public
带有虚基类的多层派生类构造函数的成员初始化列表都要列出虚基类构造函数,这样将对虚基类初始化 二次 子类型描述错误的是 A子类型关系是可逆的A子类型关系是可逆的 B公有派生类的对象可以初始化基类的引用 C只有在公有继承下,派生类是基类的字类型D子类型是可传递的不符合复制兼容规则的是B基类的对象可以赋值给派生类的对象
A派生类的对象可以赋值给基类的对象B基类的对象可以赋值给派生类的对象C派生类的对象可以初始化给基类的对象D 派生类的对象的地址可以赋值给指向基类的指针
第二篇:二级c++笔试历年真题
2010年3月考试真题(第31次)
1.数据流程图(DFD图)是______。
A、软件概要设计的工具 B、软件详细设计的工具
C、结构化方法的需求分析工具 D、面向对象方法的需求分析工具
常见的需求分析方法有:结构化分析方法和面向对象的分析方法。结构化分析就是使用数据流图(DFD)、数据字典(DD)、结构化英语、判定表和判定树等工具,来建立一种新的、称为结构化规格说明的目标文档。故本题答案为C。
2.软件(程序)调试的任务是______。
A、诊断和改正程序中的错误 B、尽可能多地发现程序中的错误 C、发现并改正程序中的所有错误 D、确定程序中错误的性质
程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发现软件中的错误。先要发现软件的错误,然后借助于一定的调试工具去执行找出软件错误的具体位置。软件测试贯穿整个软件生命期,调试主要在开发阶段。故本题答案为A。
3.软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于系统软件的是______。
A、编辑软件 B、操作系统 C、教务管理系统 D、浏览器
软件按功能可以分为:应用软件、系统软件、支撑软件(或工具软件)。应用软件是为解决特定领域的应用而开发的软件。例如,事务处理软件,工程与科学计算软件,实时处理软件,嵌入式软件,人工智能软件等应用性质不同的各种软件。系统软件是计算机管理自身资源,提高计算机使用效率并为计算机用户提供各种服务的软件。如操作系统,编译程序,汇编程序,网络软件,数据库管理系统等,所以选项B属于系统软件。故本题答案为B。
4.软件生命周期可分为定义阶段,开发阶段和维护阶段。详细设计属于______。
A、定义阶段 B、开发阶段 C、维护阶段 D、上述三个阶段
软件生命周期可分为软件定义、软件开发及软件运行维护三个阶段。软件开发阶段包括概要设计、详细设计、实现和测试四个活动阶段。故本题答案为B。5.下列叙述中正确的是______。
A、对长度为n的有序链表进行查找,最坏情况下需要的比较次数为n B、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(n/2)C、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为D、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为对于长度为n的有序线性表,在最坏情况下,二分查找只需要比较 故本题答案为A。6.有两个关系R和T如下:
次,而顺序查找需要比较n次。二分法查找只适用于顺序存储的有序表,如果采用链式存储结构,也只能用顺序查找,所以选项A是正确的。
则由关系R得到关系T的操作是______。A、选择 B、投影 C、交 D、并
从关系中找出满足给定条件的元组的操作称为选择。选择是从行的角度进行的运算,即从水平方向抽取记录。由图可知关系R通过运算得到关系T,关系T与关系R相比,属性的个数没有发生变化,记录的条数发生了变化。因此所使用的运算应该是选择。故本题答案为A。7.算法的时间复杂度是指______。
A、算法的执行时间 B、算法所处理的数据量 C、算法程序中的语句或指令条数 D、算法在执行过程中所需要的基本运算次数
所谓算法的时间复杂度,是指执行算法所需要的计算工作量。为了能够比较客观地反映出一个算法的效率,在度量一个算法的工作量时,不仅应该与所使用的计算机、程序设计语言以及程序编制者无关,而且还应该与算法实现过程中的许多细节无关。为此,可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。故本题答案为D。
8.数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它属于数据库设计的______。
A、需求分析阶段 B、逻辑设计阶段 C、概念设计阶段 D、物理设计阶段
E-R图是E-R模型的一种非常直观的图的形式表示,它描述信息结构但不涉及信息在计算机中的表示,它是数据库概念设计阶段的工具。故本题答案为C。
9.在学生管理的关系数据库中,存取一个学生信息的数据单位是______。
A、文件 B、数据库 C、字段 D、记录
实体是概念世界中的基本单位,属性附属于实体,它本身并不构成独立单位。属性有属性域,每个实体可取属性域内的值。一个实体的所有属性取值组成了一个值集叫元组(或称记录)。在概念世界中,可以用元组表示实体,也可用它区别不同的实体。所以在学生管理的关系数据库中,存取一个学生信息的数据单位是元组(或记录)。故本题答案为D。
10.数据库管理系统中负责数据模式定义的语言是______。
A、数据定义语言 B、数据管理语言 C、数据操纵语言 D、数据控制语言
数据定义语言(DDL):该语言负责数据的模式定义与数据的物理存取构建。
数据操纵语言(DML):该语言负责数据的操纵,包括查询及增、删、改等操作。
数据控制语言(DCL):该语言负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等功能。
故本题答案为A。11.有如下两个类定义 class XX{ private: double x1;protected: double x2;public: double x3;};class YY:protected XX{ private: double y1;protected: double y2;public: double y3;};在类YY中保护成员变量的个数是______。
A、1 B、2 C、3 D、4 本题主要考查了类的继承与派生。
类的继承方式有三种:公有(public)继承、保护(protected)继承和私有(private)继承。当派生类从基类保护继承时,基类的公有成员和保护成员在派生类中都为保护成员。本题派生类YY从基类XX保护继承,因此基类XX的公有成员x3和保护成员x2都成为派生类YY的保护成员,再加上派生类YY自身的保护成员y2,因此类YY中有3个保护成员。故本题答案为C。12.在C++中,cin是一个______。
A、类 B、对象 C、模板 D、函数
本题主要考查了I/O流。
在C++中,数据的输入与输出是通过I/O流来实现,cin和cout是预定义的流类对象。
故本题答案为B。
13.若x和y是程序中的两个整型变量,则下列if语句中正确的是______。
A、if(x==0)y=1;else y=2;B、if(x==0)then y=1 else y=2;C、if(x==0)y=1 else y=2;D、if x==0 y=1;else y=2;本题主要考查了if语句。if语句的语法形式为: if(表达式)语句1 else 语句2 在C++中,if语句中没有then,语句最后必须有一个分号,因此选项A正确,选项B和选项C错误;在选项D中,表达式x==0应该用圆括号括起来,因此选项D错误。故本题答案为A。14.将运算符“+”重载为非成员函数,下列原型声明中,错误的是______。
A、MyClock operator +(MyClock,long);B、MyClock operator +(MyClock,MyClock);C、MyClock operator +(long,long);D、MyClock operator +(long,MyClock);本题主要考查了运算符的重载。
运算符的重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来讲,重载的功能应当与原有功能类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型。选项A、选项B和选项D的两个参数中至少有一个参数是自定义类型,因此选项A、选项B和选项D正确。选项C中两个参数都是基本数据类型,没有自定义类型,因此选项C错误。故本题答案是C。15.要定义整型数组x,使之包括初值为0的三个元素,下列语句中错误的是______。
A、int x[3]={0,0,0};B、int x[]={0};C、static int x[3]={0};D、int x[]={0,0,0};本题主要考查了一维数组的定义与初始化。
一维数组的定义形式为:
数据类型 数组名[数组元素个数];数组的初始化就是在声明数组时给部分或全部元素赋初值。选项A定义了有三个元素的整型数组x,并初始化三个元素的值为0,因此选项A正确;当声明数组时没有给出数组元素个数,但是有初始化列表,数组元素个数由列表中元素个数来确定,因此选项D正确;选项B没有给出数组元素个数,并且在初始化列表中只给一个元素值,因此选项B定义了只有一个元素的整型数组,故选项B错误;对于数值类型数组,如果给定的数值不够,则没有指定数值的元素将初始化为0,因此选项C正确。故本题答案为B。16.下列控制格式输入输出的操作符中,能够设置浮点数精度的是______。
A、setprecision B、setw C、setfill D、showpoint 本题主要考查了输出流的格式控制。
setprecision(int n)用于控制输出流显示浮点数的精度,整数n代表显示的浮点数数字的个数。因此选项A正确。setw(int n)用于预设输入输出宽度。setfill(char c)用于预设填充字符。
showpoint用于给浮点数显示小数点和尾部的0。
因此选项B、选项C和选项D不正确。故本题答案为A。17.若MyTemp是一个只有一个虚拟类型参数的类模板,且有如下语句序列 MyTemp
A、1 B、2 C、3 D、0 本题主要考核类模板。
类模板声明的语法形式为: template<模板参数表> class 类名 {类成员声明} 使用类模板来建立对象时,应按如下形式声明:
类名<模板实参表> 对象名1,…,对象名n;在定义对象的过程中,编译系统会自动地根据需要生成相应的类定义,这种依据类模板生成类定义的过程称为类模板的实例化。类模板实例化所生成的每一个类定义就是相应类模板的一个实例,因此类模板的实例个数由类型参数的种类决定。本题使用类模板MyTemp定义对象时指定了两种类型参数:double和long,因此所生成的实例个数是2。故本题答案为B。18.下列代码段声明了3个类 class Person{};class Student:public Person{};class Undergraduate:Student{};下列关于这些类之间关系的描述中,错误的是______。
A、类Person是类Undergraduate的基类 B、类Undergraduate从类Student公有继承 C、类Student是类Person的派生类 D、类Undergraduate是类Person的派生类
本题主要考查了类的继承与派生。
在C++中,定义派生类的一般语法形式为:
class 派生类名:继承方式 基类名1,继承方式 基类名2,…,继承方式 基类名n { 派生类成员声明;};类的继承方式有三种:公有(public)继承、保护(protected)继承和私有(private)继承。如果不显式地给出继承方式,缺省的类继承方式是私有(private)继承。在声明派生类Undergraduate时缺省继承方式,因此类Undergraduate从类Student私有继承,故选项B错误。故本题答案为B。19.将前缀运算符“--”重载为非成员函数,下列原型中,能正确用于类中说明的是______。
A、Decr& operator--(int);B、Decr operator--(Decr&,int);C、friend Decr& operator--(Decr&);D、friend Decr operator--(Decr&,int);本题主要考查了运算符的重载。
运算符--既可以是前缀运算符(前减1),又可以是后缀运算符(后减1)。为了区分这两种情况,重载这两个运算符时必须在格式上有所区别:重载后缀--时必须多一个虚拟参数:int。如果将前缀--和后缀--作为非成员函数重载,那个唯一的操作数必须作为第一参数提供。又因为要修改第一操作数,对应的参数必须声明为引用。前缀--作为非成员函数重载的一般形式为: friend Decr& operator--(Decr&);后缀--作为非成员函数重载的一般形式为: friend Decr operator--(Decr&,int);当运算符重载为类的成员函数时,函数的参数个数比原来的参数个数少一个。
前缀--作为成员函数重载的一般形式为: Decr& operator--();后缀--作为成员函数重载的一般形式为: Decr operator--(int);因此选项C正确,选项D是后缀--作为非成员函数重载的形式。
故本题答案为C。20.有如下程序: #include A、2332 B、2323 C、3232 D、3223 本题主要考查了派生类的构造函数与析构函数。 构造函数在对象被创建的时候由系统自动调用,建立派生类对象时,构造函数的执行顺序如下:(1)执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右);(2)执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序(自上而下);(3)执行派生类的构造函数。 析构函数用来完成对象被删除前的一些清理工作,在对象的生存期即将结束的时刻被系统自动调用。派生类的析构函数在执行过程中也要对基类和成员对象进行操作,但它的执行过程与构造函数严格相反,即:(1)对派生类新增普通成员进行清理。(2)调用成员对象析构函数,对派生类新增的成员对象进行清理。(3)调用基类析构函数,对基类进行清理。 main()函数中,第一条语句Derived objl2(2,3);创建派生类对象obj12时,先以第一个实参2初始化基类Base成员valB,执行基类Base的构造函数,输出valB的值2;然后以第二个实参值3初始化派生类Derived成员valD,执行派生类Derived的构造函数,输出valD的值3;在对象obj12的生存期即将结束时,先调用派生类Derived的析构函数,输出valD的值3,然后调用基类析构函数,输出valB的值2。因此本程序运行时的输出结果是2332。故本题答案为A。21.有如下程序 #include A、P8-E4 B、P8-C16-C、P0-E4-D、P0-C16-本题主要考查了函数的重载、常对象和常成员函数。 使用const关键字修饰的对象称为常对象,使用const关键字说明的成员函数称为常成员函数,通过常对象只能调用它的常成员函数,而不能调用其他成员函数。两个以上的函数,具有相同的函数名,但是形参的个数或类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数,这就是函数的重载。const关键字可以用于对重载函数的区分。 在main()函数中,第一条语句定义类A的对象a1,系统自动调用类A的构造函数,以默认形参值0初始化对象a1的数据成员r1;第二条语句定义常对象a2,系统自动调用类A的构造函数,以实参值4初始化对象a2的数据成员r1;第三条语句通过对象a1调用带一个整型形参的没用const修饰的print()函数,表达式r1*r1*r1=0*0*0=0,因此输出P0-,第四条语句常对象a2调用的是用const修饰的常成员函数print(),表达式r1*r1的值为:4*4=16,因此输出C16-。故程序运行时的输出结果是P0-C16-故本题答案为D。22.若MyClass是一个类名,且有如下语句序列 MyClass c1,*c2;MyClass *c3=new MyClass;MyClass &c4=c1;上面的语句序列所定义的类对象的个数是______。 A、1 B、2 C、3 D、4 本题主要考查了对象的定义。 第1条语句定义了MyClass类的对象c1和MyClass类的对象指针变量c2。因为定义对象指针只是得到了用于存储对象地址的指针变量,不会创建对象,因此第1条语句只定义了一个类对象c1;第2条语句定义了对象指针变量c3。并初始化c3指向用new运算符动态创建的对象,因此第2条语句用new运算符动态定义了一个对象;第3条语句声明了对象引用c4,并将其初始化为对象c1的一个别名。因为创建对象引用只是为已有对象创建别名,不会创建对象,因此第3条语句没有创建类对象。因此这3条语句所定义的类对象的个数是2。 故本题答案为B。 23.下列关于类模板的描述中,错误的是______。 A、类模板的成员函数都是模板函数 B、可以为类模板参数设置默认值 C、类模板描述了一组类 D、类模板中只允许有一个类型参数 本题主要考查了类模板。 使用类模板可以为类声明一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值能取任意类型。因此选项C正确;类模板声明的语法形式为: template<模板参数表> class 类名 {类成员声明} 其中“模板参数表”由用逗号分隔的若干类型标识符或常量表达式构成,因此选项D错误;可以为类模板中的类型参数和非类型参数提供默认值,如果某个类模板参数有默认值,该列表中的所有后续参数也都必须指定默认值。因此选项B正确。类模板的成员函数都是模板函数,因此选项A正确。故本题答案为D。24.有如下程序 #include A、无输出 B、1 C、11 D、111 本题主要考查了拷贝构造函数。 拷贝构造函数是一种特殊的构造函数,具有一般构造函数的所有特性,其形参是本类的对象的引用。作用是使用一个已知的对象初始化一个正在创建的同类对象。拷贝构造函数在以下三种情况下都会被调用: 1)当用类的一个对象初始化该类的另一个对象时; 2)如果函数的形参是类的对象,调用函数时,进行形参和实参结合时; 3)如果函数的返回值是类的对象,函数执行完成返回调用者时。 函数fun的形参为类Test的对象的引用,main()函数中,第二条语句x=fun(y);调用函数fun()。使引用u为实参y的别名,然后执行函数fun()的第一条语句Test t=u;,即用Test类的对象u去初始化该类的另一个对象t,系统将自动调用拷贝构造函数,输出1,然后执行函数fun()的第二条语句return t;,函数fun()的返回值为Test类的对象t,函数执行完成返回调用者时,系统将第二次自动调用拷贝构造函数,输出1,程序执行结束。故运行这个程序的输出结果是11。故本题答案为C。 25.要定义一个引用变量p,使用引用类MyClass的一个对象,正确的定义语句是______。 A、MyClass p=MyClass;B、MyClass p=new MyClass;C、MyClass &p=new MyClass;D、MyClass a, &p=a;本题主要考查了引用的声明。 引用的声明形式:类型标识符 &引用名=目标变量名;说明:(1)&在此不是求地址运算,而是起标识作用。 (2)类型标识符是指目标变量的类型。 (3)声明引用时,必须同时对其进行初始化。 (5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。 选项A和选项B在变量p的左边没有标识&,不符合引用声明形式,因此选项A和选项B错误;选项C中,赋值号右边不是已存在的变量名,不符合引用声明的语法形式,因此选项C错误;选项D先声名对象a,然后声明引用为已声明变量名a的别名,符合引用声明形式,因此选项D正确。故本题答案为D。26.下列关于函数的描述中,错误的是______。 A、函数可以没有返回值 B、函数可以没有参数 C、函数可以是一个类的成员 D、函数不能被定义为模板 本题主要考查了函数。 函数定义的语法形式: 类型标识符 函数名(形式参数列表){ 语句序列 } 无返回值的函数其类型标识符为void。故选项A正确;函数可以没有参数,当函数定义时没有形参,则函数调用时,<实参表>亦为空,故选项B正确;函数可以是类的成员,故选项C正确;模板是C++支持参数化多态性的工具,函数模板实现了类型参数化,将函数处理的数据类型作为参数,提高了代码的可重用性,故选项D错误。故本题答案为D。 27.下列程序段中包含4个函数,其中具有隐含this指针的是______。int fun1();class Test{ public: int fun2();friend int fun3();static int fun4();};A、fun1 B、fun2 C、fun3 D、fun4 本题主要考查了this指针。 this指针是一个隐含于每一个非静态成员函数中的特殊指针。它是一个指向正在被该成员函数操作的对象,也就是要操作该成员函数的对象。因此类Test的非静态成员函数fun2中具有隐含this指针,故选项B正确。函数fun1和函数fun3均不是成员函数,因此不具有隐含this指针,故选项A和选项C不正确;静态成员不属于类的任何一个对象,而是属于整个类,因此静态成员没有this指针,故静态成员函数fun4中没有this指针,故选项D错误。故本题答案为B。28.下面是类Shape的定义: class Shape{ public: virtual void Draw()=0;};下列关于Shape类的描述中,正确的是______。 A、类Shape是虚基类 B、类Shape是抽象类 C、类Shape中的Draw函数声明有误 D、语句“Shape s;”能够建立Shape的一个对象s 本题主要考查了纯虚函数和抽象类。 声明纯虚函数的语法形式为: virtual 函数类型 函数名(参数表)=0;所以函数Draw()是纯虚函数。带有纯虚函数的类是抽象类,所以类Shape是抽象类,因此选项B正确;抽象类不能实例化,即不能定义一个抽象类的对象,因此选项D错误。故本题答案是B。29.关于函数中的<返回类型>,下列表述中错误的是______。 A、<返回类型>中有可能包含关键字int B、<返回类型>中有可能包含自定义标识符 C、<返回类型>中有可能包含字符* D、<返回类型>中有可能包含[] 本题主要考查了函数的返回类型。 函数的定义形式为: 返回类型 函数名(形参列表){函数体} 返回类型又称函数类型,表示一个函数所计算(或运行)的结果值的类型。因为函数的结果值可以为整型,因此返回类型可能包含关键字int,选项A正确;函数的返回类型可以为类,因此返回类型可能包含自定义标识符,选项B正确;函数的返回类型可以为指针,因此返回类型可能包含字符*,选项C正确;但返回类型不能为数组,因此返回类型中不可能包含[],因此选项D错误。 故本题答案为D。 30.打开文件时可单独或组合使用下列文件打开模式 ①ios_base::app ②ios_base::binary ③ios_base::in ④ios_base::out 若要以二进制读方式打开一个文件,需使用的文件打开模式为______。 A、①③ B、①④ C、②③ D、②④ 本题主要考查了I/O流。 打开一个与输出流关联的文件时,通常要指定文件模式。ios_base::app模式的功能:以写方式打开文件,若文件不存在则创建文件,若文件已存在则向文件尾添加数据;ios_base::binary模式:以二进制模式打开文件(缺省为文本模式);ios_base::in模式:以读方式打开文件;ios base::out模式:以写方式打开文件,若文件不存在则创建,若文件已存在则清空原内容(ofstream默认的打开方式)。因此若要以二进制读方式打开一个文件,需使用的文件打开模式为:ios_base::binary|ios base::in。 故本题答案为C。 31.下列关于继承方式的描述中,错误的是______。 A、如果不显式地指定继承方式,缺省的继承方式是私有(private)B、采用公有继承方式时,基类中的公有成员在派生类中仍然是公有成员 C、采用保护继承方式时,基类中的保护成员在派生类中仍然是保护成员 D、采用私有继承方式时,基类中的私有成员在派生类中仍然是私有成员 本题主要考查了类的继承与派生。 类的继承方式有三种:公有(public)继承、保护(protected)继承和私有(private)继承。如果不显式地给出继承方式,缺省的类继承方式是私有(private)继承。因此选项A正确;当派生类从基类公有继承时,基类的公有成员和保护成员的访问属性在派生类中不变,仍作为派生类的公有成员和保护成员,因此选项B正确;当派生类从基类保护继承时,基类的公有成员和保护成员在派生类中都为保护成员,因此选项C正确;当派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都改变为私有成员;无论哪种继承方式,派生类中的成员都不能访问基类中的私有成员,因此选项D错误。 故本题答案为D。 32.下列关于运算符重载的描述中,错误的是______。 A、可以通过运算符重载在C++中创建新的运算符 B、赋值运算符只能重载为成员函数 C、运算符函数重载为类的成员函数时,第一操作数是该类对象 D、重载类型转换运算符时不需要声明返回类型 本题主要考查了运算符重载。 “运算符重载”是针对C++中原有运算符进行的,不可能通过重载创造出新的运算符,因此选项A错误;在C++中,运算符的重载方式有两种:(1)重载为成员函数;(2)重载为友元函数。“=”、“[]”、“()”、“->”以及所有的类型转换运算符只能重载为成员函数,因此选项B正确;运算符重载为成员函数时,第一操作数就是对象本身,并不显式地出现在参数表中,因此选项C正确;重载类型转换运算符的格式为:operator 类型名(),其中“类型名”就代表了返回类型,因此重载类型转换运算符时不需要声明返回类型,因此选项D正确。 故本题答案为A。33.有以下程序: #include A、1_120 B、2_120 C、1_20 D、2_20 本题主要考查了派生类的构造函数、静态成员函数以及虚函数。 建立派生类对象时,构造函数的执行顺序如下:(1)执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右);(2)执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序(自上而下);(3)执行派生类的构造函数。 用static关键字声明的数据成员为静态数据成员,静态成员在每个类只有一个拷贝,由该类的所有对象共同维护和使用。 在成员函数声明的前面加上virtual修饰,即把该函数声明为虚函数。在C++中,一个基类指针(或引用)可以用于指向它的派生类对象,而且通过这样的指针(或引用)调用虚函数时,被调用的是该指针(或引用)实际所指向的对象类的那个重定义版本。 本题中,函数show在基类B和派生类D中都声明为虚函数。在基类B中把保护成员定义为静态成员count,派生类D以公有继承方式从基类B继承了保护成员count。它被基类B和派生类D的所有对象所共享,但它不属于类的任何一个对象。在main()函数中,第一条语句通过new运算符创建派生类D的对象,并把对象的首地址赋给基类指针ptr,即基类指针ptr指向派生类对象。在创建派生类对象时,先执行基类B的构造函数,count的值为1,然后执行派生类D的构造函数,count的值为2,y的值为120;main()函数的第二条语句通过基类指针ptr调用虚函数show(),被调用的是该指针实际所指向的派生类对象类的重定义版本,即输出2_120。 故本题答案为B。 34.下列叙述中,错误的是______。 A、false是一个逻辑型常量 B、“b”是一个字符型常量 C、365是一个int常量 D、3.1415926是一个double常量 本题主要考查了常量。 在C++中,逻辑型常量有两个:false(假)和true(真),因此选项A正确;字符型常量是单引号括起来的一个字符,字符串常量是双引号括起来的字符序列,因此“b”是字符串,不是字符,故选项B错误;整型常量默认为int型,因此选项C正确;实型常量默认为double型,因此选项D正确。 故本题答案为B 35.在下列字符中,不允许作为C++标识符的是______。 A、b B、B C、_ D、2 本题主要考查了C++中的标识符命名规则。 标识符的组成要符合一定的规则: (1)标识符是一个以字母或下划线开头的,由字母、数字、下划线组成的字符串; (2)标识符不能与任意一个关键字同名; (3)标识符中的字母区分大小写; (4)标识符不宜过长。 在选项D中,标识符的第一个字符是数字,因此不是合法的标识符,不允许作为C++标识符。 故本题答案为D。 36.软件是______、数据和文档的集合。 标准答案为:程序 考生答案为:函数 计算机软件是计算机系统中与硬件相互依存的另一部分,是包括程序、数据及相关文档的完整集合。37.有一个学生选课的关系,其中学生的关系模式为:学生(学号,姓名,班级,年龄),课程的关系模式为:课程(课号,课程名,学时),其中两个关系模式的键分别是学号和课号,则关系模式选课可定义为:选课(学号,______,成绩)。 标准答案为:课号 考生答案为:课号 码也称为关键字,是表中若干属性的属性组,其值惟一标识表中的一个元组。在关系模式选课中能惟一标识一个元组的是学号,课号。 38.设某循环队列的容量为50,如果头指针front=45(指向队头元素的前一位置),尾指针rear=10(指向队尾元素),则该循环队列中共有______个元素。 标准答案为:15 或 十五 或 15 考生答案为:35 在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置,因此,从排头指针front指向的后一个位置直至队尾指针rear指向的位置之间所有的元素均为队列中的元素。本题中队列的容量为50,头指针为45,那么从头指针到50之间有46、47、48、49、50,共5个元素,尾指针为10,那么从1到10之间有10个元素,所以共有15个元素。39.设二叉树如下: 对该二叉树进行后序遍历的结果为______。 标准答案为:EDBGHFCA 或 E、D、B、G、H、F、C、A 或 E,D,B,G,H,F,C,A 或 E,D,B,G,H,F,C,A 考生答案为:EDGHFCA 后序遍历是指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历左子树,然后遍历右子树,最后访问根结点,并且,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后访问根结点。40.一个队列的初始状态为空。现将元素A,B,C,D,E,F,5,4,3,2,1依次入队,然后再依次退队,则元素退队的顺序为______。 标准答案为:A,B,C,D,E,F,5,4,3,2,1 或 A,B,C,D,E,F,5,4,3,2,1 或 A、B、C、D、E、F、5、4、3、2、1 或 ABCDEF54321 或 A,B,C,D,E,F,5,4,3,2,1 或 A,B,C,D,E,F,5,4,3,2,1 或 A,B,C,D,E,F,5,4,3,2,1 或 A,B,C,D,E,F,5,4,3,2,1 考生答案为:A,B,C,D,E,F,5,4,3,2,1 队列是指允许在一端进行插入、而在另一端进行删除的线性表。允许插入的一端称为队尾,允许删除的一端称为队头。在队列这种数据结构中,最先插入的元素将最先能够被删除,反之,最后插入的元素将最后才能被删除。因此,队列又称为“先进先出”或“后进后出”的线性表。41.若x和y是两个整型变量,在执行了语句序列 x=5;y=6;y+=x--;后,x+y的值为______。 标准答案为:15 或 15 考生答案为:15 本题主要考查了后置减1运算符。 后置减1运算符是先使用变量,然后变量再自减。因此语句y+=x--;的功能相当于y=y+x;x=x-1;两条语句,因此执行语句序列x=5;y=6;y+=x--;后x的值为4,y的值为11,故x+y的值为15。42.有如下的函数定义: int Xfun(int x){ int y=x;{int x=10;y+=x;} return x+y;} 通过表达式Xfun(5)调用该函数,则得到的返回值为______。 标准答案为:20 或 20 考生答案为:20 本题主要考查了标识符的作用域与可见性。作用域是一个标识符在程序正文中有效的区域。程序运行到某一点,能够引用到的标识符,就是该处可见的标识符,如果在两个或多个具有包含关系的作用域中声明了同名标识符,则外层标识符在内层不可见。函数调用表达式Xfun(5)把实参5传递给函数Xfun的形式参数x,形参x的作用域为整个函数体。Xfun函数体的第一条语句定义变量y并初始化y的值为5,第二个复合语句中的第一条语句定义同名变量x,并初始化x的值为10,在复合语句中外层变量x不可见,因此执行复合语句的第二条语句y+=x;后y的值为15,内层变量x的作用域结束。然后执行语句return x+y;得到函数的返回值5+15=20。43.下面的函数定义是某函数模板能够生成的函数实例 int square(int n){ return n*n;} double square(double n){ return n*n;} 由此可知,该函数模板的定义是______。 标准答案为:template 函数模板是一系列相关函数的模型或样板,这些函数的源代码形式相同,只是所针对的数据类型不同。对于函数模板,数据类型本身成了它的参数,因而是一种参数化类型的函数。声明一个函数模板的格式是: template<模板形参表声明> 函数声明 其中的模板形参表声明是由一个或多个模板形参组成(如果是多个,需要用逗号隔开)。每个模板形参具有下面几种形式: (1)typename 参数名(2)class 参数名(3)类型修饰 参数名 这里的参数名可以是任意的标识符。在这三种形式中,前两种是等价的:在声明模板参数时,关键字typename与class可以互换。 因此该题函数模板定义是template 44.在执行语句序列 int i=0;do i++;while(i*i<10);时,do后面的循环体语句i++被执行的次数为______。 标准答案为:4 或 4 或 四 考生答案为:4 本题主要考查了do-while循环语句。 第一次执行循环体后i的值为1,i*i<10成立,继续执行循环体,第二次执行循环体后i的值为2,i*i<10成立,继续执行循环体,第三次执行循环体后i的值为3,i*i<10成立,继续执行循环体,第四次执行循环体后i的值为4,i*i<10不成立,结束循环。故循环语句被执行次数为4。 45.假设Xcs是一个类,该类中一个成员函数的原型为“Xcs* abc();”,则在类外定义时对应的函数头为______。 标准答案为:Xcs* Xcs::abc()考生答案为:Xcs* Xcs::abc()本题主要考查了成员函数的类外定义。 在类外定义成员函数的语法形式为: 返回值类型 类名::成员函数名(参数表){ 函数体 } 因此在类Xcs之外定义原型为“Xcs* abc();”的成员函数对应的函数头为Xcs* Xcs::abc()。46.请将下面的程序补充完整,使得程序输出“飘是张娜的书”。#include 在成员函数声明的前面加上virtual修饰,即把该函数声明为虚函数。在派生类中可以重新定义从基类继承下来的虚函数,从而提供该函数的适用于派生类的专门版本。本题在派生类MyBook中重定义了虚函数PrintInfo,因此第1个空应填virtual。 派生类的构造函数必须要以合适的初值作为参数,隐含调用基类和新增成员对象的构造函数,用以初始化它们各自的数据成员,然后再对新增的其他数据成员进行初始化。派生类构造函数的一般格式如下: <派生类名>::<派生类名>(<总参数表>):<基类名1>(参数表1),…… <基类名n>(<参数表n>), <成员对象名1>(<参数表n+1>),……, <成员对象名m>(<参数表n+m>){<派生类构造函数体>} 因此第二个空应填Book(s1),调用基类的构造函数以初始化其数据成员。47.有如下的函数定义: int Xfun(int *a,int n){ int x=*a;for(int* pa=a+1;pax)x=*pa;return x;} 若在执行了语句 int x[5]={23,46,78,55,16};后,通过表达式Xfun(x,5)调用该函数,则得到的返回值为______。 标准答案为:78 或 78 考生答案为: 本题主要考查了数组、指针和求最大值算法。 函数Xfun的功能是求首地址为a的n个数据的最大数,并把所求的最大数作为函数的返回值。函数调用表达式Xfun(x,5)把数组x的首地址传递给函数Xfun的第一个形式参数指针变量a,常数5传递给函数Xfun的第二个形式参数n,因此函数调用表达式Xfun(x,5)的返回值是数组x的5个元素的最大数78。48.请将下面的类Date的定义补充完整,使得由语句 Date FirstDay;定义的对象FirstDay的值为2010年1月1日。class Date{ public: Date(______):year(y),month(m),day(d){ } private: int year,month,day;//依次表示年、月、日 };标准答案为:int y=2010,int m=1,int d=1 考生答案为:int y,intm,int d 本题主要考查了构造函数。 构造函数的作用是在对象被创建时利用特定的值构造对象,将对象初始化为一种特定的状态,无参数的构造函数称为默认形式的构造函数,如果类中定义构造函数,编译系统将不会再为其生成默认构造函数。构造函数在对象被创建的时候由系统自动调用。类Date中定义了一个构造函数,由类Date的构造函数的初始化列表可知构造函数的形参应是三个整型变量y,m和d,编译系统将不会为类Date建立无参数的默认构造函数。建立类Date的对象FirstDay时没有给出初始值,若要正确调用有形参的构造函数,使对象FirstDay的值为2010年1月1日,则构造函数应是带默认形参值,且默认形参值为2010、1和1。故该题应填int y=2010,int m=1,int d=1。 49.在有理数类Rational中重载插入运算符<<,以便按a/q形式输出。请将<<运算符函数的定义补充完整。class Rational{ public: Rational(int aa,int qq):a(aa),q(qq){} friend ______ operator<<(ostream& out,Rational& x){ return(out< 插入运算符只能重载为非类成员函数,一般重载为友元函数。声明重载插入运算符为友元函数的函数原型为: friend ostream& operator<<(ostream& ,类名);因此该题应填ostream&。 2009年9月考试真题(第30次)1.下列数据结构中,属于非线性结构的是______。 A、循环队列 B、带链队列 C、二叉树 D、带链栈 2.对于循环队列,下列叙述中正确的是______。 A、队头指针是固定不变的 B、队头指针一定大于队尾指针 C、队头指针一定小于队尾指针 D、队头指针可以大于队尾指针,也可以小于队尾指针 3.数据库管理系统是______。 A、操作系统的一部分 B、在操作系统支持下的系统软件 C、一种编译系统 D、一种操作系统 4.下列选项中不属于结构化程序设计原则的是______。 A、可封装 B、自顶向下 C、模块化 D、逐步求精 5.有三个关系R,S和T如下: 其中关系T由关系R和S通过某种操作得到,该操作为______。 A、选择 B、投影 C、交 D、并 6.在E-R图中,用来表示实体联系的图形是______。 A、椭圆形 B、矩形 C、菱形 D、三角形 7.算法的空间复杂度是指______。 A、算法在执行过程中所需要的计算机存储空间 B、算法所处理的数据量 C、算法程序中的语句或指令条数 D、算法在执行过程中所需要的临时工作单元数 8.软件详细设计产生的图如下: 该图是______。 A、N-S图 B、PAD图 C、程序流程图 D、E-R图 9.软件设计中划分模块的一个准则是______。 A、低内聚低耦合 B、高内聚低耦合 C、低内聚高耦合 D、高内聚高耦合 10.下列数据结构中,能够按照“先进后出”原则存取数据的是______。A、循环队列 B、栈 C、队列 D、二叉树 11.有如下程序: #include A、运行时出错 B、E2-C16-C、C4-C16-D12.有如下类定义: class XX{ int xdata;public: XX(int n=0):xdata(n){ } };class YY:public XX{ int ydata;public: YY(int m=0,int n=0):XX(m),ydata(n){ } };YY类的对象包含的数据成员的个数是______。 A、1 B、2 C、3 D、4 13.有如下程序段: int i=1;while(1){ i++;if(i==10)break;if(i%2==0)cout<<'*';}、E2-E4-执行这个程序段输出字符*的个数是______。 A、10 B、3 C、4 D、5 14.有如下程序: #include A、121 B、21 C、211 D、12 15.有如下程序: #include A、1 B、2 C、3 D、运行时出错 16.已知函数FA调用FB,若要把这两个函数定义在同一个文件中,则______。 A、FA必须定义在FB之前 B、FB必须定义在FA之前 C、若FA定义在FB之后,则FA的原型必须出现在FB的定义之前 D、若FB定义在FA之后,则FB的原型必须出现在FA的定义之前 17.在下列枚举符号中,用来表示“相对于当前位置”文件定位方式的是______。 A、ios_base::cur B、ios_base::beg C、ios_base::out D、ios_base::end 18.将运算符重载为类成员函数时,其参数表中没有参数,说明该运算符是______。 A、不合法的运算符 B、一元运算符 C、无操作数的运算符 D、二元运算符 19.有如下程序: #include A、1312 B、132 C、32 D、1412 20.下列关于C++流的描述中,错误的是______。 A、cout>> 'A'表达式可输出字符A B、eof()函数可以检测是否到达文件尾 C、对磁盘文件进行流操作时,必须包含头文件fstream D、以ios_base::out模式打开的文件不存在时,将自动建立一个新文件 21.下列关于虚基类的描述中,错误的是______。 A、使用虚基类可以消除由多继承产生的二义性 B、构造派生类对象时,虚基类的构造函数只被调用一次 C、声明“class B:virtual public A”说明类B为虚基类 D、建立派生类对象时,首先调用虚基类的构造函数 22.下列关于运算符函数的描述中,错误的是______。 A、运算符函数的名称总是以operator为前缀 B、运算符函数的参数可以是对象 C、运算符函数只能定义为类的成员函数 D、在表达式中使用重载的运算符相当于调用运算符重载函数 23.有如下程序: #include A、123 234 B、***123 234 C、***123 ***234 D、***123 234*** 24.有如下模板声明: template A、template int arr[5]={1,2,3,4,5};下列语句中输出结果不是2的是______。 A、cout<<*arr+1< #include A、未知类型:未知名称 B、未知类型:精彩人生 C、书:未知名称 D、书:精彩人生 27.下列字符串中可以用作C++标识符的是______。 A、2009var B、goto C、test-2009 D、_123 28.计算斐波那契数列第n项的函数定义如下: int fib(int n){ if(n==0)return 1;else if(n==1)return 2;else return fib(n-1)+fib(n-2);} 若执行函数调用表达式fib(2),函数fib被调用的次数是______。 A、1 B、2 C、3 D、4 29.下列枚举类型的定义中,包含枚举值3的是______。A、enum test{RED,YELLOW,BLUE,BLACK};B、enum test{RED,YELLOW=4,BLUE,BLACK};C、enum test{RED=-1,YELLOW,BLUE,BLACK};D、enum test{RED,YELLOW=6,BLUE,BLACK};30.下列关于运算符重载的描述中,错误的是______。 A、::运算符不能重载 B、类型转换运算只能作为成员函数重载 C、将运算符作为非成员函数重载时必须定义为友元 D、重载[]运算符应完成“下标访问”操作 31.有如下程序: #include A、0 B、1 C、2 D、3 32.下列关于模板形参的描述中,错误的是______。 A、模板形参表必须在关键字template之后 B、模板形参表必须用括弧()括起来 C、可以用class修饰模板形参 D、可以用typename修饰模板形参 33.有如下类定义: class A{ char *a;public: A():a(0){} A(char *aa){ //把aa所指字符串拷贝到a所指向的存储空间 a=______;strcpy(a,aa);} ~A(){delete []a;} };横线处应填写的表达式是______。 A、new char[strlen(aa)+1] B、char[strlen(aa)+1] C、char[strlen(aa)] D、new char[sizeof(aa)-1] 34.有如下两个类定义: class AA{};class BB{ AA v1,*v2;BB v3;int *v4;};其中有一个成员变量的定义是错误的,这个变量是______。 A、v1 B、v2 C、v3 D、v4 35.Sample是一个类,执行下面语句后,调用Sample类的构造函数的次数是______。 Sample a[2], *p=new Sample;A、0 B、1 C、2 D、3 36.某二叉树有5个度为2的结点以及3个度为1的结点,则该二叉树中共有______个结点。 37.软件开发过程主要分为需求分析、设计、编码与测试四个阶段,其中______阶段产生”软件需求规格说明书“。 38.程序流程图中的菱形框表示的是______。 39.人员基本信息一般包括:身份证号,姓名,性别,年龄等。其中可以作为主关键字的是______。40.在数据库技术中,实体集之间的联系可以是一对一或一对多或多对多的,那么”学生“和”可选课程“的联系为______。 41.下面是一个递归函数,其功能是使数组中的元素反序排列。请将函数补充完整。 void reverse(int *a,int size){ if(size<2)return;int k=a[0];a[0]=a[size-1];a[size-1]=k;reverse(a+1,______);} 42.利用表达式a[i]可以访问int型数组a中下标为i的元素。在执行了语句int *p=a;后,利用指针p也可访问该元素,相应的表达式是______。43.类Sample的构造函数将形参data赋值给数据成员data。请将类定义补充完整。 class Sample{ public: Sample(int data=0);private: int data;};Sample::Sample(int data){ ______ } 44.若表达式(x+(y-z)*(m/n))+3中的变量均为double型,则表达式值的类型为______。 45.如下程序定义了”单词“类Word,类中重载了<运算符,用于比较”单词“的大小,返回相应的逻辑值。程序的输出结果为:After Sorting: Happy Welcome,请将程序补充完整。#include class Sample{ public: Sample();~Sample();private: static int data;};将静态数据成员data初始化为0的语句是______。 48.请将下列模板类Data补充完整。 template for(int i=50;i>20;i-=2)cout< 50.有如下程序: #include 2009年3月考试真题(第29次)1.耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是______。 A、提高耦合性降低内聚性有利于提高模块的独立性B、降低耦合性提高内聚性有利于提高模块的独立性 C、耦合性是指一个模块内部各个元素间彼此结合的紧密程度D、内聚性是指模块间互相连接的紧密程度 2..数据库应用系统中的核心问题是______。 A、数据库设计 B、数据库系统设计 C、数据库维护 D、数据库管理员培训 3.下列叙述中正确的是______。 A、栈是”先进先出“的线性表 B、队列是”先进后出“的线性表 C、循环队列是非线性结构 D、有序线性表既可以采用顺序存储结构,也可以采用链式存储结构 4.有两个关系R,S如下: R S 由关系R通过运算得到关系S,则所使用的运算为______。 A、选择 B、投影 C、插入 D、连接 5.将E-R图转换为关系模式时,实体和联系都可以表示为______。 A、属性 B、键 C、关系 D、域 6.支持子程序调用的数据结构是______。 A、栈 B、树 C、队列 D、二叉树 7.下列排序方法中,最坏情况下比较次数最少的是______。 A、冒泡排序 B、简单选择排序 C、直接插入排序 D、堆排序 8.下面叙述中错误的是______。 A、软件测试的目的是发现错误并改正错误 B、对被调试的程序进行”错误定位“是程序调试的必要步骤 C、程序调试通常也称为Debug D、软件测试应严格执行测试计划,排除测试的随意性 9.某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是______。 A、10 B、8 C、6 D、4 10.件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是______。 A、编译程序 B、操作系统 C、教务管理系统 D、汇编程序 11.有如下类定义和变量定义 class A{ public: A(){data=0;} ~A(){} int GetData()const {return data;} void SetData(int n){data=n;} private: int data;};const A a;A b;下列函数调用中错误的是______。 A、a.GetData();B、a.SetData(10);C、b.GetData();D、b.SetData(10);12.运算符重载时不需要保持的性质是______。 A、操作数个数 B、操作数类型 C、优先级 D、结合性 13.已知有数组定义 char a[3][4];下列表达式中错误的是______。 A、a[2]=”WIN“ B、strcpy(a[2],”WIN“)C、a[2][3]='W' D、a[0][1]=a[0][1] 14.在定义一个类模板时,模板形参表是用一对括号括起来的,所采用的括号是______。 A、()B、[ ] C、< > D、{ } 15.要建立文件流并打开当前目录下的文件file.dat用于输入,下列语句中错误的是______。 A、ifstream fin=ifstream.open(”file.dat“);B、ifstream *fin=new ifstream(”file.dat“);C、ifstream fin;fin.open(”file.dat“);D、ifstream *fin=new ifstream();fin->open(”file.dat“);16.有如下类定义和变量定义: class Parents{ public: int publicData;private: int privateData;};class ChildA:public Parents{/*类体略*/};class ChildB:private Parents{/*类体略*/};ChildA a;ChildB b;下列语句中正确的是 ______。 A、cout< A、YY y1(0,0);B、YY y2(1);C、YY y3(0);D、YY y4;18.下列描述中,不属于面向对象思想主要特征的是______。 A、封装性 B、跨平台性 C、继承性 D、多态性 19.有如下程序: #include A、3 B、23 C、123 D、213 20.已知表达式++a中的”++“是作为成员函数重载的运算符,则与++a等效的运算符函数调用形式为______。 A、a.operator++(1)B、operator++(a)C、operator++(a,1)D、a.operator++()21.假设下列语句都是程序运行后首次执行的输出语句,其中输出结果与另外三条语句不同的语句是______。A、cout< A、12 B、16 C、14 D、11 23.当使用ifstream流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为______。 A、ios_base::in B、ios_base::in│ios_base::out C、ios_base::out D、ios_base::in & ios_base::out 24.有如下程序: #include A、1215588 B、1218855 C、12185 D、128512 25.有如下程序段: int i=4;int j=1;int main(){ int i=8,j=i;cout< A、44 B、41 C、88 D、81 26.有如下程序: #include A、bool Pair::operator >(Pair p)const {if(m!=p.m)return m>p.m;return n>p.n;} B、bool Pair::operator >(Pair p){if(m!>p.m)return m>p.m;return n>p.n;} C、bool Pair::operator >(Pair p)const {if(m>p.m)return true;return n>p.n;} D、bool Pair::operator >(Pair p){if(m>p.m)return true;return n>p.n;} 27.已知函数fun的原型为 int fun(int,int,int);下列重载函数原型中错误的是______。 A、char fun(int,int);B、double fun(int,int,double);C、int fun(int,clar*);D、float fun(int,int,int);28.有如下程序: #include A、12 B、34 C、14 D、32 29.对C++编译器区分重载函数无任何意义的信息是______。 A、参数类型 B、参数个数 C、返回值类型 D、常成员函数关键字const 30.通过派生类的对象可直接访问其______。 A、公有继承基类的公有成员 B、公有继承基类的私有成员 C、私有继承基类的公有成员 D、私有继承基类的私有成员 31.建立一个类对象时,系统自动调用______。 A、析构函数 B、构造函数 C、静态函数 D、友元函数 32.有如下程序: #include A、1 B、2 C、3 D、4 33.已知类MyClass声明如下: class MyClass{ int n;public: MyClass(int k):n(k){} int getValue()const{return n;} };在下列数组定义中正确的是______。 A、MyClass x1[2];B、MyClass x2[2]={new MyClass(1),new MyClass(2)};C、MyClass *x3[2];D、MyClass *x4[2]={MyClass(1),MyClass(2)};34.有如下程序段: int i=5;while(int i=0){ cout<<'*';i--;} 运行时输出”*“的个数是______。 A、0 B、1 C、5 D、无穷 35.下列关于函数模板的描述中,错误的是______。 A、从模板实参表和从模板函数实参表获得信息矛盾时,以模板实参的信息为准 B、对于常规参数所对应的模板实参,任何情况下都不能省略 C、虚拟类型参数没有出现在模板函数的形参表中时,不能省略模板实参 D、模板参数表不能为空 36.符合结构化原则的三种基本控制结构是:选择结构、循环结构和______。 37.假设用一个长度为50的数组(数组元素的下标从0到49)作为栈的存储空间,栈底指针bottom指向栈底元素,栈顶指针top指向栈顶元素,如果bottom=49,top=30(数组下标),则栈中具有______个元素。38.在E-R图中,图形包括矩形框、菱形框、椭圆框。其中表示实体联系的是______框。39.软件测试可分为白盒测试和黑盒测试。基本路径测试属于______测试。40.数据库系统的核心是______。41.有如下程序段: char c[20]=”examination“;c[4]=0;cout< 42.下面的函数利用递归实现了求1+2+3…..+n的功能: int sum(int n){ if(n==0)return 0;else return n+sum(n-1);} 在执行sum(10)的过程中,递归调用sum函数的次数是______。43.有如下程序: #include class Xtwo{ //由两个Type类型的数据成员构成的模板类 Type a;Type b;public: Xtwo(Type aa=0,Type bb=0):a(aa),b(bb){} int Compare(){ //比较a和b的大小 if(a>b)return 1;else if(a==b)return 0;else return-1;} Type Sum(){return a+b;} //返回a和b之和 Type Mult();//函数声明,返回a和b之乘积 };template 2008年9月考试真题(第28次)1.一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是______。 A、12345ABCDE B、EDCBA54321 C、ABCDE12345 D、54321EDCBA 2.在面向对象方法中,不属于”对象“基本特点的是______。 A、一致性 B、分类性 C、多态性 D、标识惟一性 3.在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是______。 A、O(n)B、C、D、4.在数据管理技术发展的三个阶段中,数据共享最好的是______。 A、人工管理阶段 B、文件系统阶段 C、数据库系统阶段 D、三个阶段相同 5.下列叙述中正确的是______。A、循环队列中有队头和队尾两个指针,因此,循环队列是非线性结构 B、在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况 C、在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况 D、循环队列中元素的个数是由队头指针和队尾指针共同决定 6.下列叙述中正确的是______。 A、顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的 B、顺序存储结构只针对线性结构,链式存储结构只针对非线性结构 C、顺序存储结构能存储有序表,链式存储结构不能存储有序表 D、链式存储结构比顺序存储结构节省存储空间 7.一间宿舍可住多个学生,则实体宿舍和学生之间的联系是______。 A、一对一 B、一对多 C、多对一 D、多对多 8.有三个关系R、S和T如下: 由关系R和S通过运算得到关系T,则所使用的运算为______。 A、笛卡尔积 B、交 C、并 D、自然连接 9.数据流图中带有箭头的线段表示的是______。 A、控制流 B、事件驱动 C、模块调用 D、数据流 10.在软件开发中,需求分析阶段可以使用的工具是______。 A、N-S图 B、DFD图 C、PAD图 D、程序流程图 11.下列选项中,与实现运行时多态性无关的是______。 A、重载函数 B、虚函数 C、指针 D、引用 12.在C++中,编译系统自动为一个类生成缺省构造函数的条件是______。 A、该类没有定义任何有参构造函数 B、该类没有定义任何无参构造函数 C、该类没有定义任何构造函数 D、该类没有定义任何成员函数 13.要利用C++流进行文件操作,必须在程序中包含的头文件是______。 A、iostream B、fstream C、strstream D、iomanip 14.对于通过公有继承定义的派生类,若其成员函数可以直接访问基类的某个成员,说明该基类成员的访问权限是______。 A、公有或私有 B、私有 C、保护或私有 D、公有或保护 15.有如下程序: #include A、1 B、2 C、3 D、4 16.下列语句中,正确的是______。 A、char *myString=”Hello-World!“;B、char myString=”Hello-World!“;C、char myString[11]=”Hello-World!“;D、char myString[12]=”Hello-World!“;17.在语句”cout<<'A';“中,cout是______。 A、类名 B、对象名 C、函数名 D、C++的关键字 18.在一个派生类的成员函数中,试图调用其基类的成员函数”Void f();“,但无法通过编译。这说明______。 A、f()是基类的私有成员 B、f()是基类的保护成员 C、派生类的继承方式为私有 D、派生类的继承方式为保护 19.下列关于模板的叙述中,错误的是______。 A、调用模板函数时,在一定条件下可以省略模板实参 B、可以用int、double这样的类型修饰符来声明模板参数 C、模板声明中的关键字class都可以用关键字typename替代 D、模板的形参表中可以有多个参数 20.下列字符串中不能作为C++标识符使用的是______。 A、WHILE B、user C、_1var D、9stars 21.有如下程序: #include A、语句1 B、语句2 C、语句3 D、语句4 22.在类声明中,紧跟在”public:“后声明的成员的访问权限是______。 A、私有 B、公有 C、保护 D、默认 23.下列语句中错误的是______。A、const int a;B、const int a=10;C、const int *point=0;D、const int *point=new int(10);24.在下列原型所示的C++函数中,按”传值“方式传递参数的是______。 A、Void f1(int x);B、Void f2(int *x);C、Void f3(const int *x);D、Void f4(int &x);25.建立一个有成员对象的派生类对象时,各构造函数体的执行次序为______。 A、派生类、成员对象类、基类 B、成员对象类、基类、派生类 C、基类、成员对象类、派生类 D、基类、派生类、成员对象类 26.下列模板声明中,有语法错误的是______。 A、template A、有的运算符可以作为非成员函数重载 B、所有的运算符都可以通过重载而被赋予新的含义 C、不得为重载的运算符函数的参数设置默认值 D、有的运算符只能作为成员函数重载 28.下列运算符函数中,肯定不属于类Value的成员函数的是______。 A、Value operator+(Value);B、Value operator-(Value,Value);C、Value operator*(int);D、Value operator/(Value);29.在一个抽象类中,一定包含有______。 A、虚函数 B、纯虚函数 C、模板函数 D、重载函数 30.如果表达式a>=b中的”>=“是作为非成员函数重载的运算符,则可以等效地表示为______。 A、a.operator>=(b)B、b.operator>=(a)C、operator>=(a,b)D、operator>=(b,a)31.有如下程序: #include A、112444 B、11114444 C、121444 D、11314444 32.当使用ofstream流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为______。 A、ios_base::in B、ios_base::binary C、ios_base::in | ios_base::out D、ios_base::out 33.有如下程序: #include A、3 B、10 C、12 D、15 34.定义派生类时,若不使用关键字显式地规定采用何种继承方式,则默认方式为______。 A、私有继承 B、非私有继承 C、保护继承 D、公有继承 35.若已经声明了函数原型”void fun(int a,double b=0.0);“,则下列重载函数声明中正确的是______。 A、void fun(int a=90,double b=0.0);B、int fun(int a,double B);C、void fun(double a,int B);D、bool fun(int a,double b=0.0); 36.数据库设计包括概念设计、______和物理设计。 37.软件工程三要素包括方法、工具和过程,其中,______支持软件开发的各个环节的控制和管理。38.在二维表中,元组的______不能再分成更小的数据项。 39.按照软件测试的一般步骤,集成测试应在______测试之后进行。40.对下列二叉树进行中序遍历的结果是______。 41.有如下程序: #include 42.有如下类定义,请将Sample类的拷贝构造函数补充完整。class Sample{ public: Sample(){} ~Sample(){if(p)delete p;} Sample(const Sample& s){ ______ } void SetData(int data){p=new int(data);} private: int *p;};43.请在下列程序中的空格处填写正确的语句: class Sample{ public: Sample(){} ~Sample(){} void SetDate(int data){//将Sample类成员变量date设置成形参的值 ______ } private:int data;};44.有如下递归函数: int Fun(int n){ if(n<=1)return 1;______ } 请补充完整,使得函数Fun能够正确计算形参n的阶乘。45.有如下程序: #include double Wages::getPay()const{return base+bonus-tax;} Wages Wages::operator+(Wages w)const{ return Wages(base+w.base, bonus+w.bonus,tax+w.tax);} int main(){ Wages w1(2000,500,100),w2(5000,1000,300);cout<<(w1+w2).getPay()< 46.已知数组a中有n个元素,下列语句将数组a中从下标x1开始的k个元素移动到从下标x2开始的k个元素中,其中0<=x1 48.当使用关键字______作为函数返回类型时,该函数不返回任何值。49.有如下程序: #include class Dog: public Pet{ public: Dog(char *name):Pet(name){} void call()const{ cout<<”汪汪叫“;} }; class Cat:public Pet{ public: Cat(char *name):Pet(name){} void call()const{ cout<<”喵喵叫“;} }; int main(){ Pet *pet1=new Dog(”哈克“), *pet2=new Cat(”吉米“);cout< getName();pet1->call();cout< 2008年4月考试真题(第27次)1.程序流程图中带有箭头的线段表示的是______。 A、图元关系 B、数据流 C、控制流 D、调用关系 2.结构化程序设计的基本原则不包括______。 A、多态性 B、自顶向下 C、模块化 D、逐步求精 3.下列关于栈的叙述正确的是______。 A、栈按”先进先出“组织数据 B、栈按”先进后出“组织数据 C、只能在栈底插入数据 D、不能删除数据 4.算法的有穷性是指______。 A、算法程序的运行时间是有限的 B、算法程序所处理的数据量是有限的 C、算法程序的长度是有限的 D、算法只能被有限的用户使用 5.软件设计中模块划分应遵循的准则是______。 A、低内聚低耦合 B、高内聚低耦合 C、低内聚高耦合 D、高内聚高耦合 6.对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是______。 A、快速排序 B、冒泡排序 C、直接插入排序 D、堆排序 7.有三个关系R、S和T如下: 由关系R和S通过运算得到关系T,则所使用的运算为______。 A、并 B、自然连接 C、笛卡尔积 D、交 8.在软件开发中,需求分析阶段产生的主要文档是______。 A、可行性分析报告 B、软件需求规格说明书 C、概要设计说明书 D、集成测试计划 9.设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为______。 A、课号,成绩 B、学号,成绩 C、学号,课号 D、学号,姓名,成绩 10.在数据库设计中,将E-R图转换成关系数据模型的过程属于______。 A、需求分析阶段 B、概念设计阶段 C、逻辑设计阶段 D、物理设计阶段 11.已知Value是一个类,value是Value的一个对象。下列以非成员函数形式重载的运算符函数原型中,正确的是______。 A、Value operator+(Value v,int i);B、Value operator+(Value v=value,int i);C、Value operator+(Value v,int i=0);D、Value operator+(Value v=value,int i=0);12.有如下程序: #include A、375 B、357 C、0375 D、0357 13.下列有关运算符重载的叙述中,正确的是______。 A、运算符重载是多态性的一种表现 B、C++中可以通过运算符重载创造新的运算符 C、C++中所有运算符都可以作为非成员函数重载 D、重载运算符时可以改变其结合性 14.有如下4个语句: ① cout<<'A'< A、①和③ B、①和④ C、②和③ D、②和④ 15.下列有关类成员的叙述中,正确的是______。 A、友元函数是类的成员函数 B、类成员的默认访问权限是私有的 C、类成员函数必须声明为公有的 D、类的静态数据成员不能是常成员 16.执行下列语句段后,输出字符”*“的个数是______。for(int i=50;i>1;i-=2)cout<<'*';A、24 B、25 C、26 D、50 17.有如下类定义: class Point{ private: static int how_many;};______how_many=0;要初始化Point类的静态成员how_many,下划线处应填入的内容是______。 A、int B、static int C、int Point:: D、static int point:: 18.下面是一个模板声明的开始部分: template A、这可能是一个函数模板的声明 B、这可能是一个类模板的声明 C、这既可能是一个函数模板的声明,也可能是一个类模板的声明 D、这肯定是一个错误的模板声明 19.有如下类声明: class Base{ protected: int amount;public: Base(int n=0):amount(n){} int getAmount()const{return amount;} };class Derived:public Base{ protected: int value;public: Derived(int m,int n):value(m),Base(n){} int getData()const{return value+amount;} };已知x是一个Derived对象,则下列表达式中正确的是______。A、x.value+x.getAmount()B、x.getData()-x.getAmount()C、x.getData()-x.amount D、x.value+x.amount 20.有如下程序: #include A、1111 B、1211 C、1112 D、1212 21.下列有关C++流的叙述中,错误的是______。 A、C++操作符setw设置的输出宽度永久有效 B、C++操作符endl可以实现输出的回车换行 C、处理文件I/O时,要包含头文件fstream D、进行输入操作时,eof()函数用于检测是否到达文件尾 22.下列关键字中,不能用来表示继承方式的是______。 A、private B、static C、public D、protected 23.下列语句分别是不同程序中的第一个输入输出语句。若去掉其中的”< A、cout< A、53 B、35 C、55 D、33 25.有如下定义: int a[5]={1,3,5,7,9},*p=a;下列表达式中不能得到数值5的是______。 A、a[2] B、a[3] C、*(p+2)D、*p+4 26.有如下类定义: class MyClass{ int value;public: MyClass(int n):value(n){} int getValue()const{return value;} };则类MyClass的构造函数的个数是______。 A、1个 B、2个 C、3个 D、4个 27.下列有关类继承的叙述中,错误的是______。 A、继承可以实现软件复用 B、虚基类可以解决由多继承产生的二义性问题 C、派生类构造函数要负责调用基类的构造函数 D、派生类没有继承基类的私有成员 28.有如下类和对象的定义: class Constants{ public: static double getPI(){return 3.1416;} };Constants constants;下列各组语句中,能输出3.1416的是______。 A、cout< A、const B、2a C、_shape D、-count 30.已知函数f的原型是void f(int *a,long &b);,变量v1、v2的定义是: int v1;long v2;下列调用语句中正确的是______。 A、f(v1,&v2);B、f(v1,v2);C、f(&v1,&v2);D、f(&v1,v2);31.下列有关函数重载的叙述中,错误的是______。 A、函数重载就是用相同的函数名定义多个函数 B、重载函数的参数列表必须不同 C、重载函数的返回值类型必须不同 D、重载函数的参数可以带有默认值 32.有如下程序: #include A、*this B、this C、&amount D、amount 33.下列有关抽象类和纯虚函数的叙述中,错误的是______。 A、拥有纯虚函数的类是抽象类,不能用来定义对象 B、抽象类的派生类若不实现纯虚函数,它也是抽象类 C、纯虚函数的声明以”=0;“结束 D、纯虚函数都不能有函数体 34.下列有关模板的叙述中,正确的是______。 A、函数模板不能含有常规形参 B、函数模板的一个实例就是一个函数定义 C、类模板的成员函数不能是模板函数 D、用类模板定义对象时,绝对不能省略模板实参 35.已知枚举类型声明语句为: enum COLOR{WHITE,YELLOW,GREEN=5,RED,BLACK=10};则下列说法中错误的是______。 A、枚举常量YELLOW的值为1 B、枚举常量RED的值为6 C、枚举常量BLACK的值为10 D、枚举常量WHITE的值为1 36.在关系数据库中,用来表示实体之间联系的是______。 37.设某循环队列的容量为50,头指针front=5(指向队头元素的前一位置),尾指针rear = 29(指向队尾元素),则该循环队列中共有______个元素。 38.在数据库管理系统提供的数据定义语言、数据操纵语言和数据控制语言中,______负责数据的模式定义与数据的物理存取构建。 39.测试用例包括输入值集和______值集。40.深度为5的满二叉树有______个叶子结点。 41.如下程序声明了一个电话号码类PhoneNumber,重载了流插入运算符<<,以便于电话号码的输出。请将程序补充完整。#include friend(ostream &output,const PhoneNumber &num){output< 49.在类中,______成员为类的所有对象所共享。 50.在面向对象的程序设计中,将数据和处理数据的操作封装成一个整体就定义了一种事物的类型,称作”类“。类是一种抽象的概念,属于该类的一个实例叫做”______"。 一、单项选择题(共20题,每题1分,共20分) 6、对重载函数形参的描述中,错误的是 D A.参数的个数可能不同 B.参数的类型可能不同 C.参数的顺序可能不同 D.参数的个数、类型、顺序都相同,只是函数的返回值类型不同 9、通常的拷贝构造函数的参数是 A. 某个对象名 B.某个对象成员名 C. 某个对象的引用 D.某个对象的指针名 10、关于构造函数特点的描述中,错误的是 A.定义构造函数必须指出类型 B.构造函数的名字与该类的类名相同 C.一个类中可定义0至多个构造函数 D.构造函数是一种成员函数 12、关于常成员的描述中,错误的是 A.常成员包含常数据成员和常成员函数两种 B.常数据成员必须是公有的C.常数据成员要使用构造函数成员初始化列表进行初始化 D.常对象只能调用它的常成员函数,不能调用其它的成员函数 13、关于友元函数的描述中,错误的是 A.友元函数不是成员函数 B.友元函数只能访问类中私有成员 C.友元函数破坏隐藏性,尽量少用 D.友元函数说明在类体内,使用关键字friend18、能够释放对象所占资源的是(析构函数) 二、填空题(共9题16空,每空1分,共16分) 1、函数重载时,编译系统会根据_形参的类型或形参的个数 来区分。 3、若希望用一个已有对象来构造另一个同类型的对象,可以使用拷贝构造函数来实现。 4、静态成员属于类,而不属于任何一个对象,它被同一个类的所有对象共享。 5、类的继承方式有私有 继承、公有 继承和保护继承。 6、重载运算符的含义必须清楚,不能有二义性。 7、按照联编进行阶段的不同,联编方法可分为两种: 动态联编 和静态联编。 8、当基类中的某个成员函数被声明为虚函数后,此虚函数就可以在一个或多个派生类中被重新定义,在派生类中重新定义时,其函数原型,包括返回类型、参数名、函数个数、参数类型以及参数的顺序都必须与基类中的原型完全相同。 1.在类中必须声明成员函数的原型,成员函数的实现部分可以写在类外。 2.如果需要在被调函数运行期间,改变主调函数中实参变量的值,则函数的形参应该是引用类型或指针类型。 3.抽象类只能作为基类使用,而不能声明它的对象。 4.进行函数重载时,被重载的同名函数如果都没有用const修饰,则它们的形参个数或类型必须不同。 5.通过一个常对象只能调用它的常成员函数,不能调用其他成员函数。 6.函数的递归调用是指函数直接或间接地调用自身。 7.拷贝构造函数的形参必须是本类对象的引用。 上机实验: 1、回文是指正读,反读均相同的字符序列,如“abba”和“abdba”均是回文,但是“good”不是回文,试用STACK类编写该程序。 #include int top = 1;char *cMyStack =(char *)malloc((iLen/2+1)*sizeof(char));//定位对原始数组的检测索引初始位置 cMyStack[0] = iLen/2;if(1 == iLen%2){ ++cMyStack[0];} //将原始数组的一半元素入栈 for(top=1;top<=iLen/2;top++){ cMyStack[top] = *(cScr+top-1);} //从栈顶开始依次匹配 while(*(cScr+cMyStack[0])== cMyStack[--top] && cMyStack[0]++ < iLen){} if(0 == top){//是回文数 free(cMyStack);return 1;} else {//不是回文数 free(cMyStack);return 0;} } 运行结果: 2.利用两个栈类S1、S2模拟一个队列时,编写一程序利用栈的运算实现队列的插入、删除以及判断队列空的运算。 #include template assert(!mStack2.empty());mStack2.pop();} template sq.pushBack(1);printQueue(sq);sq.pushBack(2);printQueue(sq);sq.pushBack(3);printQueue(sq);sq.popFront();printQueue(sq);sq.popFront();printQueue(sq);sq.popFront();printQueue(sq);return 0;} 运行结果: 实验2: 声明复数的类Complex,使用友元函数add实现复数的加法。 #include < iostream > using namespace std; class Complex { private: double real, image;public : Complex(){} Complex(double a,double b) { real = a;image = b;} void setRI(double a, double b){ real = a;image = b;} double getReal(){ return real;} double getImage(){ return image;} void print(){ if(image>0) cout<<“复数:”<< real <<“ + ”<< image <<“i”<< endl;if(image<0) cout<<“复数:”<< real <<“-”<< image <<“i”<< endl;} friend Complex add(Complex ,Complex);//声明友元函数 }; Complex add(Complex c1, Complex c2)//定义友元函数 { Complex c3; c3.real = c1.real + c2.real;//访问Complex类中的私有成员 c3.image = c1.image + c2.image;return c3;} void main(){ Complex c1(29, 0.634), c2, c3;c2.setRI(85,106.012);c3 = add(c1, c2); cout<<“复数一:”;c1.print();cout<<“复数二:”;c2.print();cout<<“相加后:”;c3.print();} 结果: 实验三: 7-5 定义一个基类Shape,在此基础上派生出一个Rectangle和Circle,二者都有getArea()函数计算对象的面积。使用Rectangle类创建一个派生类Square.#include public: Shape(){} double GetArea() { return 0.1;} };class Rectangle: public Shape { public: Rectangle(double w,double h) { width=w;height=h;} double GetArea(){ return width*height;} private: double width,height;};class Circle:public Shape { private: double r; public: Circle(double rr){ r=rr;} double GetArea(){ return PI*r*r;} }; int main(){ Rectangle * rec=new Rectangle(5,6); Circle * cir=new Circle(5); cout<<“RecArea:”< cout<<“CirArea:”< return 1; } 运行结果: 7-10.定义一个Object类,有数据成员weight及相应的操作函数,由此派生出Box类,增加数据成员height和width及相应的操作函数,声明一个Box对象,观察构造函数和析构函数的调用顺序。#include object(){ cout<<“构造object对象”< class box:public object { private: int Height,Width;public: box(){ cout<<“构造box对象”< 姓名:XX 学院:XXX 班级:XXX 学号:XXX i++; } while(i<=10);cout<<“sum=”< #include for(i;i<=10,i++) { sum+=i; } cout<<“sum=”< cout<<“不是合法的输入”< 实验 三、函数的应用(2学时) 1、实验目的: 掌握函数的定义和调用方法。练习重载函数使用。练习函数模板的使用 练习使用系统函数。 在main()函数中提示输入两个整数x,y,使用cin语句得到x,y的值,调用pow(x,y)函数计算x的y次幂的结果,再显示出来。程序名:lab3_4.cpp。 编写递归函数int fib(int n),在主程序中输入n的值,调用fib函数计算Fibonacci级数。公式为fib(n)=fib(n-1)+fib(n-2),n>2;fib(1)=fib(2)=1。使用if语句判断函数的出口,在程序中用cout语句输出提示信息。程序名:lab3_5.cpp。 7)调试操作步骤如下: 选择菜单命令Build|Start Debug |Step In,系统进入单步执行状态,程序开始运行,并出现一个DOS窗口,此时光标停在main()函数的入口处。 把光标移到语句answer=fib(n)前,从Debug菜单单击Run To Cursor,在程序运行的DOS窗口中按提示输入数字10,这时回到可视界面中,光标停在第11行,观察一下n的值。 从Debug菜单中单击Step Into,程序进入fib函数,观察一下n的值,把光标移到语句return(fib(n-2)+fib(n-1))前,从Debug菜单单击Run to Cursor,再单击Step Into,程序递归调用fib函数,又进入fib函数,观察n的值。 继续执行程序,参照上述的方法,观察程序的执行顺序,加深对函数调用和递归调用的理解。 再试试Debug菜单栏中的别的菜单项,熟悉Debug的各种方法。 4、实验原理 C++中函数的重载使得同样的函数名下,只要参数类型、数目不同时,即可根据输入的数据进行相应的函数调用,使用起来简单方便。 5、思考与体会 C++中,函数的运用与之前学过的C语言既有相同之处,也有着不同的地方。相同的地方在于格式、用法等框架上的不变。但是C语言中对于同样的函数名是只能够申明一种函数的,倘若有相同的函数名出现系统即会报错,所以用起来有时是极为不便 0第三篇:C++常用填空题
第四篇:C++实验
第五篇:C++实验报告