C++程序设计模拟试卷(六)一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。1.当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中()A.都是虚函数B.只有被重新说明时才是虚函数C.只有被重新说明为virtual时才是虚函数D.都不是虚函数答案:A解析:在基类声明为virtual的函数为虚函数,在派生类中只要有相同的函数(函数名相同、返回值相同、形参类型和个数相同)即使不用virtual说明,也都是虚函数。2.以下基类中的成员函数表示纯虚函数的是()A.virtualvoidvf(int)B.voidvf(int)=0C.virtualvoidvf()=0D.virtualvoidyf(int){}答案:C解析:纯虚函数是特殊的虚函数,没有函数体,形式为:virtual返回类型函数名(形参列表)=0;因此选C项。3.下面对静态数据成员的描述中,正确的是()A.静态数据成员可以在类体内进行初始化B.静态数据成员可以直接用类名或者对象名来调用C.静态数据成员不能用private控制符修饰D.静态数据成员不可以被类的对象调用答案:B解析:静态成员可用类名或者对象名来调用,静态数据成员必须在类外进行初始化。静态成员可以用public、private和protected修饰。所以选B项。4.所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是()A.类B.对象C.函数体D.数据块答案:A解析:类即数据和操作的组合体,数据是类的静态特征,操作是类具有的动作。5.类B是类A的公有派生类,类A和类B中都定义了虚函数func(),p是一个指向类A对象的指针,则p-A::func()将()A.调用类A中的函数func()B.调用类B中的函数func()C.根据p所指的对象类型而确定调用类A中或类B中的函数func()D.既调用类A中函数,也调用类B中的函数答案:A解析:指向类成员指针的使用,A::func()是明确调用A类的func函数,所以不管p指向基类或者派生类对象,都执行基类虚函数。注意p-A::func()和p-fun();进行区分。如果使用p-fun(),因为p指向派生类对象,由动态多态性可知要调用派生类的虚函数。6.在面向对象的程序设计中,首先在问题域中识别出若干个()A.函数B.类C.文件D.过程答案:B解析:面向过程的和面向对象都具有、函数、文件和过程这些概念,而面向对象程序才有类和对象的特征。所以选择B。7.在下列成对的表达式中,运算结果类型相同的一对是()A.7.0/2.0和7.0/2B.5/2.0和5/2C.7.0/2和7/2D.8/2和6.0/2.0答案:A解析:小数默认的类型为double类型,整数除以整数结果是取整的结果。A、B、C和D项的第一项分别是double、double、double和int类型的,第二项分别是double、int、int和double类型,所以选择A项。8.下列不具有访问权限属性的是()A.非类成员B.类成员C.数据成员D.函数成员答案:A解析:类成员包括成员函数和数据成员,都可以使用访问权限public、private和protected来修饰,而普通的变量不能使用访问权限来说明。9.以下有关继承的叙述正确的是()A.构造函数和析构函数都能被继承B.派生类是基类的组合C.派生类对象除了能访问自己的成员以外,不能访问基类中的所有成员D.基类的公有成员一定能被派生类的对象访问答案:C解析:构造函数和析构函数不能被派生类继承,A项错误。派生类是基类的扩展,B项错。派生类可以访问基类公有和保护类型的成员,不能访问基类私有成员。D项基类是公有的成员,若采用私有继承,派生类对象不能直接访问。选择C项。10.下列有关模板和继承的叙述正确的是()A.模板和继承都可以派生出一个类系B.从类系的成员看,模板类系的成员比继承类系的成员较为稳定C.从动态性能看,继承类系比模板类系具有更多的动态特性D.相同类模板的不同实例一般没有联系,而派生类各种类之间有兄弟父子等关系答案:D解析:类是相同类型事物的抽象,具有不同的操作。而模板是不同类型的事物,具体相同的操作的抽象。类模板的实例化后,各个对象没有任何关系。而类对象是通过派生、继承等关系的关系。11.适宜采用inline定义函数情况是()A.函数体含有循环语句B.函数体含有递归语句C.函数代码少、频繁调用D.函数代码多、不常调用答案:C解析:内联函数具有程序代码少、频繁调用和执行效率高的特征,所以选择C项。12.要采用动态多态性,说法正确的是()A.基类指针调用虚函数B.派生类对象调用虚函数C.基类对象调用虚函数D.派生类指针调用虚函数答案:A解析:使用基类的指针或引用,由指向或引用的对象来决定调用不同类的虚函数。所以选择A。13.C++类体系中,不能被派生类继承的有()A.转换函数B.构造函数C.虚函数D.静态成员函数答案:B解析:构造函数不能被继承,而转换函数、虚函数和静态成员函数都可以被继承,所以选择B项。14.下列不是描述类的成员函数的是()A.构造函数B.析构函数C.友元函数D.拷贝构造函数答案:C解析:构造函数、析构函数、拷贝构造函数都是特殊的成员函数,友元则不是成员函数。所以选择C项。15.下列不能作为类的成员的是()A.自身类对象的指针B.自身类对象C.自身类对象的引用D.另一个类的对象答案:B解析:类的定义,如果有自身类对象,使得循环定义,B项错误。在类中具有自身类的指针,可以实现链表的操作,当然也可以使用对象的引用。类中可以有另一个类的对象,即成员对象。所以选择B选项。16.下列不是描述类的成员函数的是()A.构造函数B.析构函数C.友元函数D.拷贝构造函数答案:C解析:友元函数不是类成员,只是它可以访问类中的成员。17.关于对象概念的描述中,说法错误的是()A.对象就是C语言中的结构变量B.对象代表着正在创建的系统中的一个实体C.对象是类的一个变量D.对象之间的信息传递是通过消息进行的答案:A解析:A对象在C++中才有,包括数据和操作两项,而C中的变量只有数据,没有操作。所以A项错误。18.派生类的构造函数的成员初始化列表中,不能包含()A.基类的构造函数B.基类的对象初始化C.派生类对象的初始化D.派生类中一般数据成员的初始化答案:C解析:派生类的构造函数的成员初始化,包括基类成员、基类对象成员和派生类成员。因为本身就是初始化定义的对象,在构造函数中再进行该类对象的初始化产生了循环定义,或者类中不能包括本身类的成员对象。所以选择C项。19.关于new运算符的下列描述中,错误的是()A.它可以用来动态创建对象和对象数组B.使用它创建的对象或对象数组可以使用运算符delete删除C.使用它创建对象时要调用构造函数D.使用它创建对象数组时必须指定初始值答案:D解析:new创建的对象数组不能指定初始值,所以调用无参的构造函数,选择D项。20.假定一个类的构造函数为A(intaa,intbb){a=aa++;b=a*++bb;},则执行Ax(4,5);语句后,x.a和x.b的值分别为()A.4和5B.4和20C.4和24D.20和5答案:C解析:执行构造函数将数据成员进行赋值,aa++是后加,先赋值a=4,++bb,bb变量值先自加为6,再与a相乘,所以b=24。二、填空题(本大题共20小题,每小题1分,共20分)请在每小题的空格中填上正确答案。错填、不填均无分。1.在C++中,编译指令都是以___(符号)开始。答案:#C++的源程序可包括各种编译指令,以指示编译器对源代码进行编译之前先对其进行预处理。所有的编译指令都以#开始,每条指令单独占用一行,同一行不能有其他编译指令和C++语句(注释例外)2.在函数前面用___保留字修饰时,则表示该函数表为内联函数。答案:inline[解析]内联函数,用来提高程序运行速度。在类内部定义的函数也是内联函数。3.执行下列程序inta=21,j=16;cout.setf(ios::hex);couta;cout.unsetf(ios::hex);coutjendl;程序的输出结果是___。答案:1516[解析]a=21以十六进制输出,j=16以十进制输出。4.在单继承和多继承方式中,面向对象的程序设计应尽量使用___继承。答案:单[解析]多继承是单继承的扩展,且多继承易产生二义性等问题。5.函数模板中紧随template之后尖括号内的类型参数都要冠以保留字___。答案:class[解析]类模板的使用。templateclassT,也可以引入多参数的如:templateclassT1,classT2,...,classTn6.在C++中,访问指针所指向的对象的成员使用___运算符。答案:-或.[解析]使用指针访问成员有两种方法:成员运算符“.”或指向运算符“.”。7.定义类的动态对象数组时,系统只能够自动调用该类的___构造函数对其进行初始化。答案:无参[解析]使用new创建对象数组,调用无参构造函数。8.局部对象和全局对象中,在同一程序中___生存期最长。答案:全局对象变量或对象的生命期或者作用域的不同,全局对象生命期长。9.this指针始终指向调用成员函数的___。答案:对象this指针是隐藏的指针,它指向调用函数的对象。10.派生类的主要用途是可以定义其基类中___。答案:不具有的成员[解析]继承的特点,扩充基类,即在派生类中增加基类不具有的成员。11.在用class定义一个类时,数据成员和成员函数的默认访问权限是___。答案:private[解析]定义类时的成员默认为私有,而结构体则是公有。12.使用new为int数组动态分配10个存储空间是___。答案:newint[10];[解析]newdelete动态开辟空间和删除空间。newint[10],注意不要写成newint(10),使用小括号只能开辟一个空间,使用10来初始化该值。13.类模板用来表达具有___的模板类对象集。答案:相同处理方法[解析]模板特点是不同的数据具有相同的处理方法的抽象。14.如果通过同一个基类派生一系列的类,则将这些类总称为___。答案:类族[解析]单继承方式派生的众多的类。15.面向对象的四个基本特性是多态性、继承性、和封装性___。答案:抽象[解析]考察面向对象的四个特征。程序由一组抽象的对象组成,一组对象的共同特征抽象出类的概念,类是对象的抽象,对象是类的实例。封装即将数据和操作紧密结合提供访问的接口,外部通过接口实现访问数据,提供安全性。继承继承解决了类的扩展性。多态性不同对象调用相同的函数名,但调用不同的函数,实现不同的功能,解决了接口统一的问题。16.所有模板都是以___关键字和一个形参表开头的。答案:template[解析]类模板,函数模板都要使用template这一关键字。17.在C++语言中,访问一个对象的成员所用的成员运算符是___。答案:.[解析]成员运算符“.”,如果是指针可以使用“-”。18.开发一个C++语言程序的步骤通常包括编辑、___、连接、运行和调试。答案:编译[解析]vc开发过程,要经过编辑、编译、连接和运行四个步骤,与其它高级语言相同。19.执行下列代码stringstr(HelloC++);coutstr.substr(5,3);程序的输出结果是___。答案:C++[解析]substr取子字符串,第1个参数表示要截取子串在字符串中的位置,第2个表示取多少个字符。20.定义___函数时,应在参数个数或参数类型上有所不同。答案:重载[解析]重载函数要求同名函数具有相同的功能,而只能是函数类型、参数个数或参数顺序不同。系统将根据同名函数的这些不同之处来选择其对应的实现。三、改错题(本大题共5小题,每小题4分,共20分)1.#includeiostream#includefstr