《面向对象程序设计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中保护的数据成员和成员函数的个数是(B)。classMyBASE{private:intk;public:voidset(intn){k=n;}intget()const{returnk;}};classMyDERIVED:protectedMyBASE{protected:intj;public:voidset(intm,intn){MyBASE::set(m);j=n;}intget()const{returnMyBASE::get()+j;}};A)4B)3C)2D)107、已知在一个类体中包含如下函数原型:Volumeoperator-(Volume)const;,下列关于这个函数的叙述中,错误的是(B)。A)这是运算符-的重载运算符函数B)这个函数所重载的运算符是一个一元运算符C)这是一个成员函数D)这个函数不改变类的任何数据成员的值08、执行如下的程序段后,输出结果是(A)。cout.fill('*');cout.width(6);cout.fill('#');cout123endl;A)###123B)123###C)***123D)123***09、在下列函数原型中,可以作为类AA构造函数的是(D)。A)voidAA(int);B)intAA();C)AA(int)const;D)AA(int);10、下面四个选项中,(A)是用来声明虚函数的。A)virtualB)publicC)includeD)usingnamespace11、实现运行时的多态性要使用(D)。A)重载函数B)构造函数C)析构函数D)虚函数12、要实现动态联编,必须通过(A)调用虚函数。A)对象指针B)成员名限定C)对象名D)派生类名13、以下(C)成员函数表示纯虚函数。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的下列定义中,正确的是(B)。A)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*有参数。(C)A)2、2B)2、1C)1、2D)1、116、应在下列程序划线处填入的正确语句是(C)。classBase{public:voidfun(){coutBase::funendl;}};classDerived:publicBase{voidfun(){//显示调用基类的函数fun()coutDerived::funendl;}};A)fun();B)Base.fun();C)Base::fun();D)Base-fun();1、C++是(C)。A.面向对象的程序设计语言B.面向过程的程序设计语言C.既支持面向对象的程序设计又支持面向过程的程序设计的混合型语言D.非结构化的程序设计语言2、面向对象程序设计思想的主要特征中不包括(D)。A.封装性B.多态性C.继承性D.功能分解,逐步求精3、若定义:stringstr;当语句cinstr;执行时,从键盘输入:MicrosoftVisualStudio6.0!所得的结果是str=(B)。A.MicrosoftVisualStudio6.0!B.MicrosoftC.MicrosoftVisualD.MicrosoftVisualStudio6.04、考虑下面的函数原型声明:voidtestDefaulParam(inta,intb=7,charz='*');下面函数调用中,不合法的是(C)。A.testDefaulParam(5);B.testDefaulParam(5,8);C.testDefaulParam(5,'#');D.testDefaulParam(0,0,'*');5、下列语句中,将函数intsum(intx,inty)正确重载的是(C)。A.floatsum(intx,inty);B.intsum(inta,intb);C.floatsum(floatx,floaty);D.doublesum(inty,intx);6、下列表示引用的方法中,(A)是正确的。已知:inta=1000;A.int&x=a;B.char&y;C.int&z=1000;D.float&t=&a;7、在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用(A)。A.内联函数B.重载函数C.递归调用D.嵌套调用8、下列有关C++类的说法中,不正确的是(D)。A.类是一种用户自定义的数据类型B.只有类中的成员函数或类的友元函数才能存取类中的私有成员C.在类中,如果不做特别说明,所有成员的访问权限均为私有的D.在类中,如果不做特别说明,所有成员的访问权限均为公用的9、已知X类,则当程序执行到语句:Xarray[3];时,调用了(D)次构造函数。A.0B.1C.2D.310、下面说法中,正确的是(B)A.一个类只能定义一个构造函数,但可以定义多个析构函数B.一个类只能定义一个析构函数,但可以定义多个构造函数C.构造函数与析构函数同名,只要名字前加了一个求反符号(~)D.构造函数可以指定返回类型,而析构函数不能指定任何返回类型,即使是void类型也不可以11、已知:print()函数是一个类的常成员函数,它无返回值,下列表示中,(A)是正确的。A.voidprint()const;B.constvoidprint();C.voidconstprint();D.voidprint(const);12、下面描述中,表达错误的是(B)A.公用继承时基类中的public成员在派生类中仍是public的B.公用继承时基类中的private成员在派生类中仍是private的C.公用继承时基类中的protected成员在派生类中仍是protected的D.私有继承时基类中的public成员在派生类中是private的13、设置虚基类的目的是(B)。A.简化程序B.消除二义性C.提高运行效率D.减少目标代码14、下面(B)的叙述不符合赋值兼容规则。A.派生类的对象可以赋值给基类的对象B.基类的对象可以赋值给派生类的对象C.派生类的对象可以初始化基类的对象D.派生类的对象的地址可以赋值给指向基类的指针15、关于虚函数的描述中,(C)是正确的。A.虚函数是一个static类型的成员函数B.虚函数是一个非成员函数C.基类中说明了虚函数后,派生类中与其对应的函数可不必说明为虚函数D.派生类的虚函数与基类的虚函数具有不同的参数个数和类型16、下面关于友元的描述中,错误的是(D)。A.友元函数可以访问该类的私有数据成员B.一个类的友元类中的成员函数都是这个类的友元函数C.友元可以提高程序的运行效率D.类与类之间的友元关系可以继承17、下列关于静态数据成员的说法,不正确的是(C)。A.类中定义的公用静态数据成员,可以通过类的对象来访问B.类中定义的所有静态数据成员,都必须在类外初始化C.静态数据成员不是所有对象所共用的D.普通的成员函数可以直接访问类中的静态数据成员18、如果表达式++i*k中的“++”和“*”都是重载的友元运算符,若采用运算符函数调用格式,则表达式还可以表示为(B)。A.operator*(i.operator++(),k)B.operator*(operator++(i),k)C.i.operator++().operator*(k)D.k.operator*(operator++(i))19、下面对模板的声明,正确的是(C)。A.templateTB.templateclassT1,T2C.templateclassT1,classT2D.templateclassT1;classT220、下列的各类函数中,(C)不是类的成员函数A.构造函数B.析构函数C.友元函数D.复制构造函数1.类的实例化是指(A)A)创建类对象B)定义类C)调用类的成员D)指明具体的类2.类的构造函数是在什么时间被自动调用的?(B)A)类创建时B)创建对象时C)删除对象时D)不自动调用3.类的析构函数是在什么时间被自动调用的?(C)A)类创建时B)创建对象时C)删除对象时D)不自动调用4.要实现动态联编,派生类中的虚函数(D)A)返回的类型可以与虚函数的原型不同B)参数个数可以与虚函数的原型不同C)参数类型可以与虚函数的原型不同D)以上都不对5.关于虚函数,正确的描述是(A)A)构造函数不能是虚函数B)析构函数不能是虚函数C)虚函数可以是友元函数D)虚函数可以是静态成员函数6.类的构造函数的作用是(C)A)一般成员函数B)类的初始化C)对象的初始化D)删除对象7.有关运算符重载正确的是(D)A)C++语言允许在重载运算符时改变运算符的操作个数B)C++语言允许在重载运算符时改变运算符的优先级C)C++语言允许在重载运算符时改变运算符的结合性D)C++语言允许在重载运算符时改变运算符的原来的功能8.可以被对象之外访问的成员是(B)A)私有成员函数B)公有成员函数C)常量成员函数D)所有成员函数9.多重继承是(B)。A)多个单一继承的叠加B)导出类有多个直接基类C)多个导出类有唯一的基类D)每个导出类最多只有一个直接基类,但它可以有多个间接基类10.C++对C语言作了很多改进,下列描述中(D)使得C语言发生了质变,即从面向过程变成了面向对象。A)增加了一些新的运算符B)允许函数重载,并允许设置默认参数C)规定函数说明必须用原型D)引进了类和对象的概念三、程序的填空、程序的执行(每题4分,共20分。)24、以下程序是定义一个计数器类counter,对其重载运算符“+”,请填空。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();}25、下列程序的输出结果为2,请将程序补充完整。