注:1.试题字迹务必清晰,书写工整。本题6页,本页为第1页2.题间不留空,一般应题卷分开试题编号:3.务必用A4纸打印C++面向对象程序设计考试试题答案一、单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在题干后的括号内。每小题1分,共20分)1.面向对象程序设计将数据与____a____放在一起,作为一个相互依存、不可分割的整体来处理。A.对数据的操作B.信息C.数据隐藏D.数据抽象2.____a____不是面向对象系统所包含的要素。A.重载B.对象C.类D.继承3.按照标识符的要求,____a____符号不能组成标识符。A.连接符B.下划线C.大小写字母D.数字字母4.已知ch是字符型变量,下面正确的赋值语句是___b_____。A.ch=’123’;B.ch=’\xff’;C.ch=’\08’;D.ch=”\”;5.要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用____a____。A.内联函数B.递归调用C.重载函数D.嵌套调用6.____c____的功能是对对象进行初始化。A.析构函数B.数据成员C.构造函数D.静态成员函数7.在下列关键字中,用以说明类中公有成员的是___a_____。A.publicB.privateC.protectedD.friend课程名称:面向对象的技术与方法任课教师:唐宁九学号:姓名:本题14页,本页为第2页8._____D___无返回类型,但又有return语句。A.虚函数B.内联函数C.友元函数D.类型转换函数9.类模板的使用实际上是将类模板实例化成一个具体的___A_____。A.类B.对象C.函数D.模板类10.利用友元函数重载“”运算符,第2个参数必须为___c_____。A.指针B.对象C.引用D.无值11.用成员函数重载二元运算符@,则显式调用方式为__C______。A.obj1.operator@(obj2)B.operator@(obj1,obj2)C.obj1.operator@()D.obj1@obj212.通常拷贝构造函数的参数是___c_____。A.某个对象名B.某个对象的成员名C.某个对象的引用名D.某个对象的指针名13.已知一个类A,_____B___是指向类A成员函数的指针。假设类有三个公有成员:voidf1(int),voidf2(int)和inta。A.A*pB.intA::*pc=&A::aC.voidA::*paD.A*pp14.用struct定义类,若它的成员缺省段约束符的说明,其成员是____b____的成员。A.私有段B.公有段C.特殊段D.保护段15.下列定义中,___A____是定义指向数组的指针p。A.int*p[5]B.int(*p)[5]C.(int*)p[5]D.int*p[]16.C++中的类有两种用法:一种是类的实例化,即生成类的对象,并参与系统的运行;另一种是通过_____c___,派生出新的类。A.复用B.单继承C.继承D.多继承17.派生类的对象对它的基类成员中___A_____是可以访问的。A.公有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.私有继承的公有成员18.说明静态成员函数的关键字为_____a___。A.staticB.virtualC.friendD.void课程名称:面向对象的技术与方法任课教师:唐宁九学号:姓名:本题14页,本页为第3页19.下列运算符中,_____c___运算符在C++中不能重载。A.?:B.+C.-D.=20.cin是____b____类的标准对象的引用。A.ostreamB.istreamC.stdinD.stdout二、多项选择题(在每小题的五个备选答案中,选出若干个正确的答案,并将其号码分别填在题干后的括号内;多选、少选、错选均无分。每小题2分,共10分)1.若给出函数声明:voidf(inta=1,intb=2,intc=3,intd=4);下面的函数调用合法的有___ABD_____。A.f()B.f(5)C.f(5,6)D.f(5,6,7)E.f(5,6,7,8)2.不能用友元函数重载的运算符有___ABDE_____。A.=B.[]C.+D.-E.()3.对一元运算符进行重载后,正确的显式调用方式有___BD_____。A.@aB.operator@(a)C.a@bD.a.operator@()E.a@4.关于构造函数,正确的描述有___BD____。A.可以是虚函数B.可以有参数C.可以被继承D.可以重载E.可以显式调用5.C++的模板有____DE____模板。A.运算符B.数据C.类型D.类E.函数三、名词解释(每小题2分,共8分)1.封装性:封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员。课程名称:面向对象的技术与方法任课教师:唐宁九学号:姓名:本题14页,本页为第4页2.类:实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。3.构造函数:是一种特殊的方法主要用来在创建对象时初始化对象即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中特别的一个类可以有多个构造函数可根据其参数个数的不同或参数类型的不同来区分它们即构造函数的重载4.内联函数:,内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展(有时称作在线扩展);也就是说建议编译器将指定的函数体插入并取代每一处调用该函数的地方(,从而节省了每次调用函数带来的额外时间开支。四、判断分析题(判断正误,将正确的划上“√”,错误的划上“╳”,并简述理由。每小题3分,共12分)1.空类就是没有名字的类。错。空类是没有任何成员的类2.引用类型和指针类型作为函数的形式参数时,对调用函数的实际参数的要求是一样的,均是地址。错3.在派生类中,若基类的一个成员在派生类中也把相同名字定义为一个成员,则不可调整它的访问。错。因为基类构造函数的调用顺序是按照派生类定义时的顺序,而内嵌对象构造函数调用顺序应该按照成员在类中声明的顺序.两种都可以控制4.对象数组在创建时要求构造函数不能有任何参数。错。静态数据成员是一个类的多个对象共享的五、读程序、得结果(每小题5分,共20分)1.#includeiostream.hclassA{inta;public:voidseta(intx){a=x;}voidshowa(){coutaendl;}};classB{intb;public:课程名称:面向对象的技术与方法任课教师:唐宁九学号:姓名:本题14页,本页为第5页voidsetb(intx){b=x;}voidshowb(){coutbendl;}}classC:publicA,privateB{intc:public:voidsetc(intx,inty,intz){c=z;seta(x);setb(y);}voidshowc(){coutcendl;}};main(){Cc;c.seta(1);c.showa();c.setc(1,2,3);c.showc();}以上程序的执行结果是____3____。2.#includeiostream.hclasscsample{private:inti;staticintk;public:csample();voiddisplay();};csample::csample(){i=0;k++;}voidcsample::display(){cout”i=”i”,k=”kendl;}intcsample::k=0;main(){csamplea,b;a.display();b.display();}以上程序的执行结果是_____i=0,k=2I=0,k=2_。____。3.#includeiostream.hclasssample{intx;public:voidsetx(inti){x=i;}intputx(){returnx;}};main()课程名称:面向对象的技术与方法任课教师:唐宁九学号:姓名:本题14页,本页为第6页{sample*p;sampleA[3];A[0].setx(5);A[1].setx(6);A[2].setx(7);for(intj=0;j3;j++){p=&A[j];coutp-putx()””;}coutendl;}以上程序的执行结果是___567_____。4.#includeiostream.hstaticintdys[]={31,28,31,30,31,30,31,31,30,31,30,31};classdate{intmo,da,yr;public:date(intm,intd,inty){mo=m,da=d;yr=y;}date(){}voiddisp(){coutmo”/”da”/”yrendl;}dateoperator+(intday){datedt=*this;day+=dt.da;while(daydys[dt.mo-1]){day-=days[dt.mo-1];if(++dt.mo==13){dt.mo=1;dt.yr++;}}dt.da=day;returndt;}};main(){dated1(2,10,2001),d2;d2=d1+20;d2.disp();}以上程序的执行结果是___3/2/2001___。六、编程题(每小题15分,共30分)1.用模板设计一个堆栈类,包含判栈、读栈、入栈和出栈功能,要求用成员函数重载“()”实现判栈功能,用友元函数重载“--”实现出栈功能。重载“-”为出栈?“”?判栈有判空和判满。#includeiostreamusingnamespacestd;templateclassT课程名称:面向对象的技术与方法任课教师:唐宁九学号:姓名:本题14页,本页为第7页classStack{private:intsize;inttop;T*space;public:Stack(intn);~Stack(){delete[]space;}voidpush(Tt);friendostream&operator(ostream&out,Stack&st){while(!(st.operator()()))outst.space[st.top++]endl;returnout;}booloperator()()const{returntop==size;}boolIsfull()const{returntop==0;}};templateclassTStackT::Stack(intsize){this-size=size;top=size;space=newT[size];}templateclassTvoidStackT::push(Tt){if(!Isfull())课程名称:面向对象的技术与方法任课教师:唐宁九学号:姓名:本题14页,本页为第8页space[--top]=t;}intmain(){Stackints(20);//可以指定栈的大小s.push(1);s.push(2);s.push(3);s.push(4);s.push(5);s.push(6);couts;}这个没问题,如果是重载-改为:#includeiostreamusingnamespacestd;templateclassTclassStack{private:intsize;inttop;T*space;public:Stack(intn);~St