第1页福建工程学院2014--2015学年第一学期期末考试(B卷)共9页课程名称:面向对象程序设计考试方式:开卷()闭卷(√)题号一二三四五六七八九十总分统分人签名得分考生注意事项:1、本试卷共9页,请查看试卷中是否有缺页。2、考试结束后,考生不得将试卷、答题纸和草稿纸带出考场。教师注意事项:如果整门课程由一个教师评卷的,只需在累分人栏目签名,题首的评卷人栏目可不签名。一、单项选择题(每小题2分,共30分)1.重载一个运算符时,其参数表中没有任何参数,这表明该运算符是(B)A.作为友元函数重载的1元运算符B.作为成员函数重载的1元运算符C.作为友元函数重载的2元运算符D.作为成员函数重载的2元运算符2.在C++中把不返回任何类型的函数应该说明为(C)。A.intB.charC.voidD.double3.要实现动态联编必须(D)。A.通过成员名限定来调用虚函数B.通过对象名来调用虚函数C.通过派生类对象来调用虚函数D.通过对象指针或引用来调用虚函数4.在C++中,封装是借助(B)达到目的。A.结构B.类C.数组D.函数第2页5.假定AA是一个类,“AA*abc()const;”是该类中一个成员函数的原型,若该函数返回this值,当用x.abc()调用该成员函数后,x的值(C)A.已经被改变B.可能被改变C.不变D.受到函数调用的影响6.以下关于抽象类的描述,(D)是正确的。A.不能说明抽象类的指针或引用B.可以说明抽象类对象C.抽象类的纯虚函数的实现可以由自身给出,也可以由派生类给出D.抽象类的纯虚函数的实现由派生类给出7.以下关于函数模板叙述正确的是(C)A.函数模板也是一个具体类型的函数B.函数模板的类型参数与函数的参数是同一个概念C.通过使用不同的类型参数,函数模板可以生成不同类型的函数D.用函数模板定义的函数没有类型8.建立含有类对象成员的派生类对象时,其构造函数的执行顺序为(C)A.自己所属类、对象成员所属类、基类的构造函数B.对象成员所属类、基类、自己所属类的构造函数C.基类、对象成员所属类、自己所属类的构造函数D.基类、自己所属类、对象成员所属类的构造函数9.构造函数不具备的特征是(D)A.构造函数的函数名与类名相同B.构造函数可以重载C.构造函数可以设置默认参数D.构造函数必须指定类型说明得分评卷人密封线班级:______姓名:______学号:______第3页10.实现两个相同类型数加法的函数模板的声明中(D)是正确的。A.add(Tx,Ty)B.Tadd(x,y)C.Tadd(Tx,y)D.Tadd(Tx,Ty)11.C++对C语言作了很多改进,即从面向过程变成为面向对象的主要原因是(D)A.增加了一些新的运算符B.允许函数重载,并允许设置缺省参数C.规定函数说明符必须用原型D.引进了类和对象的概念。12.若Sample类中的一个成员函数说明为voidset(Sample&a),则Sample&a的含义是(B)。A.指向类Sample的名为a的指针B.a是类Sample的对象引用,用来作函数Set()的形参C.将a的地址赋给变量SetD.变量Sample与a按位与的结果作为函数Set的参数13.在(C)情况下适宜采用inline定义内联函数。A.函数体含有循环语句B.函数体含有递归语句C.需要加快程序的执行速度D.函数代码多、不常调用14.this指针存在的目的是(B)。A.保证基类公有成员在子类中可以被访问B.保证每个对象拥有自己的数据成员,但共享处理这些数据成员的代码C.保证基类保护成员在子类中可以被访问D.保证基类私有成员在子类中可以被访问15.类的析构函数是对一个对象进行(B)操作时自动调用。A.建立B.撤消C.赋值D.引用第4页二、填空题(每空1分,共20分)1.带有__纯虚函数______的类称为抽象类,它只能作为__基类______来使用。2.同一个类的两个对象,其数据成员是不同的,但方法是共享的。3.设在程序中使用如下语句申请了一个对象数组:Point*ptr=newPoint[2];则在需要释放ptr指向的动态数组对象时,所使用的语句是_delete[]ptr____。4.对象传送消息一般由3部分组成:接收对象名、调用操作名和必要的参数5.类成员的默认访问方式是private。6.类完成了面向对象程序设计的封装特性。7.执行下列代码cout″Hex:″hex255;输出结果为Hex:ff。8.C++的流库预定义了4个流,它们是cin、cout、cerr和clog。9.类中运算符重载一般采用两种形式:成员函数和友元函数。10.基类的公有成员在私有派生类中是___私有_______成员,基类的保护成员在公有派生类中是___保护_______成员。11.对虚函数使用对象指针或引用,系统使用_____静态_____联编,对虚函数使用对象调用时,系统使用___动态_______联编。12.将成员函数放在类外,所使用的作用域运算符为::。13.重载“”操作符时,应声明为___输出重载_________函数。14.所谓赋值兼容规则是指在公有派生情况下,一个____派生____类的对象可以作为___基_____类的对象来使用的地方。15.若y是x的引用,则对y的操作就是对___x___的操作。得分评卷人班级:______姓名:______学号:______密封线第5页三、程序分析(每小题4分,共20分)1.阅读程序,写出运行结果:#includeiostream.hclassaa{public:virtualintfunc(){return0;}};classtest:publicaa{public:intfunc(){return58;}};voidmain(){testd;aa&b=d;coutb.func()endl;coutb.aa::func()endl;}2.阅读程序,写出运行结果:#includeiostream.htemplateclassTclassSample{Tn;public:Sample(Ti){n=i;}intoperator==(Sample&);};templateclassTintSampleT::operator==(Sample&s){if(n==s.n)return1;elsereturn0;}voidmain(){Sampleintsl(2),s2(3);cout″s1与s2的数据成员″(sl==s2?″相等″:″不相等″)endl;Sampledoubles3(2.5),s4(2.5);cout″s3与s4的数据成员″(s3==s4?″相等″:″不相等″)endl;}3.阅读程序,写出运行结果#includeiostream.hclassA{private:intX,Y;public:A(){X=Y=0;coutDefaultConstructorcalled.endl;}A(intxx,intyy){X=xx;Y=yy;coutConstructorcalled.endl;}~A(){coutDestructorcalled.endl;}};voidmain(){A*p1=newA;deletep1;p1=newA(1,2);deletep1;}得分评卷人班级:______姓名:______学号:______密封线运行结果:DefaultConstructorcalled.Destructorcalled.Constructorcalled.Destructorcalled.运行结果:580运行结果:s1与s2的数据成员不相等s3与s4的数据成员相等第7页4.下面程序中有一处错误,请用下横线标出错误所在行并提出修改意见。classMyClass{intx=20,y;//私有数据不能直接初始化public:MyClass(intaa,intbb);、intGetX();intGetY();};改正:classMyClass{intx,y;public:MyClass(intaa,intbb){x=aa,y=bb;}intGetX(){returnx;}intGetY(){returny;}};5.下面程序中有一处错误,请用下横线标出错误所在行并提出修改意见。classOne{protected:inta;public:voidsetOne(intx){a=x;}voidshowOne(){couta=aendl;}};classTwo:privateOne{public:voidsetTwo(intx){a=x;}};voidmain(){Twoobj;obj.setTwo(10);coutobj.a=obj.aendl;}改正:classOne{protected:inta;public:voidsetOne(intx){a=x;}voidshowOne(){couta=aendl;}};classTwo:privateOne{public:voidsetTwo(intx){a=x;}intget_a(){returna;}};voidmain(){Twoobj;obj.setTwo(10);coutobj.a=obj.get_aendl;}四、编程题(每题10分,共30分)1.编写复数类Complexnumber,其属性为:real(实部),img(虚部)。完成复数的加法运算Add()和减法运算Sub()及对应的+运算符和-运算符重载。#includeiostreamusingnamespacestd;classComplexnumber{private:doublereal;doubleimg;public:Complexnumber(doublerr=1.0,doubleii=1.0){real=rr,img=ii;}Complexnumberoperator+(Complexnumbercom);Complexnumberoperator-(Complexnumbercom);doubleget_real(){returnreal;}得分评卷人班级:______姓名:______学号:______密封线doubleget_img(){returnimg;}friendComplexnumberAdd(Complexnumbera,Complexnumberb);friendComplexnumberSub(Complexnumbera,Complexnumberb);};ComplexnumberComplexnumber::operator+(Complexnumbercom){Complexnumbercc;cc.img=img+com.img;cc.real=real+com.real;returncc;}ComplexnumberComplexnumber::operator-(Complexnumbercom){Complexnumbercc;cc.img=img-com.img;cc.real=real-com.real;returncc;}ComplexnumberAdd(Complexnumbera,Complexnumberb){Complexnumbercc;cc.img=a.img+b.img;cc.real=a.real+b.real;returncc;}ComplexnumberSub(Complexnumbera,Complexnumberb){Complexnumbercc;cc.img=a.img-b.img;cc.real=a.real-b.real;returncc;}intmain(){ComplexnumberA(2,3),B(3,4),C;C=A+B;coutC.get_real()C.get_img()endl;