1《面向对象程序设计C++》期末考试试卷一、选择题(每小题3分,共48分。)01、下列关于C++函数的叙述中,正确的是(C)。A)每个函数至少要具有一个参数B)每个函数都必须返回一个值C)函数在被调用之前必须先声明D)函数不能自己调用自己02、下列关于类和对象的叙述中,错误的是(A)。A)一个类只能有一个对象B)对象是类的具体实例C)类是对某一类对象的抽象D)类和对象的关系是一种数据类型与变量的关系03、在C++中,用于实现运行时多态性的是(D)。A)内联函数B)重载函数C)模板函数D)虚函数04、下列关于运算符重载的叙述中,正确的是(B)。A)通过运算符重载,可以定义新的运算符B)有的运算符只能作为成员函数重载C)若重载运算符+,则相应的运算符函数名是+D)重载二元运算符时,必须声明两个形参05、对于语句coutxendl;错误的是描述是(D)。A)“cout”是一个输出流对象B)“endl”的作用是输出回车换行C)“x”是一个变量D)“”称作提取运算符06、有如下类声明,则类MyDERIVED中保护的数据成员和成员函数的个数是()。classMyBASE{private:intk;public:voidset(intn){k=n;}intget()const{returnk;}};classMyDERIVED:protectedMyBASE{protected:intj;public:voidset(intm,intn){MyBASE::set(m);j=n;}2intget()const{returnMyBASE::get()+j;}};A)4B)3C)2D)107、已知在一个类体中包含如下函数原型:Volumeoperator-(Volume)const;,下列关于这个函数的叙述中,错误的是()。A)这是运算符-的重载运算符函数B)这个函数所重载的运算符是一个一元运算符C)这是一个成员函数D)这个函数不改变类的任何数据成员的值08、执行如下的程序段后,输出结果是()。cout.fill('*');cout.width(6);cout.fill('#');cout123endl;A)###123B)123###C)***123D)123***09、在下列函数原型中,可以作为类AA构造函数的是()。A)voidAA(int);B)intAA();C)AA(int)const;D)AA(int);10、下面四个选项中,()是用来声明虚函数的。A)virtualB)publicC)includeD)usingnamespace11、实现运行时的多态性要使用()。A)重载函数B)构造函数C)析构函数D)虚函数12、要实现动态联编,必须通过()调用虚函数。A)对象指针B)成员名限定C)对象名D)派生类名13、以下()成员函数表示纯虚函数。A)virtualintvf(int);B)voidvf(int)=0;C)virtualvoidvf()=0;D)virtualvoidvf(int){}14、有如下类声明:classXA{private:intx;public:XA(intn){x=n;}};classXB:publicXA{private:inty;public:XB(inta,intb);};在构造函数XB的下列定义中,正确的是()。3A)XB::XB(inta,intb):x(a),y(b){}B)XB::XB(inta,intb):XA(a),y(b){}C)XB::XB(inta,intb):x(a),XB(b){}D)XB::XB(inta,intb):XA(a),XB(b){}15、在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。则operator+有个参数,operator*有参数。()A)2、2B)2、1C)1、2D)1、116、应在下列程序划线处填入的正确语句是()。classBase{public:voidfun(){coutBase::funendl;}};classDerived:publicBase{voidfun(){//显示调用基类的函数fun()coutDerived::funendl;}};A)fun();B)Base.fun();C)Base::fun();D)Base-fun();二、填空题(每空2分,共20分。)17、面向对象程序设计有四个主要特点,即抽象、封装、_继承___和__多态性__。18、非成员函数应声明为类的_友元___函数才能访问这个类的private成员。19、派生类中的成员不能直接访问基类中的_私有___成员。20、在用class定义一个类时,数据成员和成员函数的默认访问权限是__private__。21、运算符重载函数可能是类的_成员___函数,也可以是类的_友元___函数,还可以是普通函数。22、用流对象的成员函数控制输出格式时,用于设置字段宽度的流成员函数的名称是width____,与之作用相同的控制符名称是_setw___。23、含有纯虚函数的类称为_抽象类___。三、程序的填空、程序的执行(每题4分,共20分。)24、以下程序是定义一个计数器类25、下列程序的输出结果为2,请将程序补4counter,对其重载运算符“+”,请填空。classcounter{private:intn;public:counter(){n=0;}counter(inti){n=i;}counteroperator+(counterc)//运算符重载函数{countert;t.n=n+c.n;returnt;}voiddisp(){coutn=nendl;}};voidmain(){counterc1(5),c2(10),c3;c3=c1+c2;c1.disp();c2.disp();c3.disp();}充完整。classBase{public:virtualvoidfun(){cout1;}};classDerived:publicBase{public:voidfun(){cout2;}};intmain(){Base*p=newDerived;p-fun();deletep;return0;}26、写出执行下面程序的输出结果。voidfun(int&x,inty){intt=x;x=y;y=t;}intmain(){inta[2]={23,42};fun(a[1],a[0]);std::couta[0],a[1]std::endl;28、写出执行下面程序的输出结果。classBase{private:charc;public:Base(charn):c(n){}virtual~Base(){coutC;}};5return0;}23,2327、写出执行下面程序的输出结果。classA{public:A(){coutA;}};classB{public:B(){coutB;}};classC:publicA{Bb;public:C(){coutC;}};intmain(){Cobj;return0;}ABCclassDer:publicBase{private:charc;public:Der(charn):Base(n+1),c(n){}~Der(){coutC;}};intmain(){Der(X);return0;}XY四、编程题(12分)29、编写一个程序计算“三角形、正方形、圆形”三种图形的面积,要求:a)抽象出一个基类base;b)在其中说明一个虚函数用来求面积;c)利用派生类定义“三角形、正方形、圆形”;d)编写主函数并测试。解:程序如下:#includeiostreamusingnamespacestd;classbase{public:virtualfloatarea()const{return0;}};classtriangle:publicbase{protected:floatbian,height;6public:triangle(floata=0,floath=0){bian=a;height=h;}virtualfloatarea()const{returnbian*height/2;}};classsquare:publicbase{protected:floatbian;public:square(floata=0){bian=a;}virtualfloatarea()const{returnbian*bian;}};classcircle:publicbase{protected:floatradius;public:circle(floatr=0){radius=r;}virtualfloatarea()const{return3.14*radius*radius;}};intmain(){trianglet(3,4);squares(5);circlec(2);base*p;p=&t;couttriangle'sarea:p-area()endl;7p=&s;coutsquare'sarea:p-area()endl;p=&c;coutcircle'sarea:p-area()endl;return0;}