179面向对象程序设计_固定试卷模拟2一、单选题(共20题,共40分)1.下列运算符中,可以重载的是(2分)A.?:B..C.::D.++2.已知show()函数是一个类的常成员函数,无返回值,下列表示中正确的是(2分)A.constvoidshow()B.voidshow()constC.voidconstshow()D.voidshow(const)3.在下列函数原型中,可以作为类A构造函数的是(2分)A.voidA(int);B.intA();C.A(int)const;D.A(int);4.下列符号中不能作为C++标识符的是(2分)A.pointsB.5xC.x5D._2565.C++流中重载的运算符(2分)A.用于输出操作的成员函数B.用于输入操作的成员函数C.用于输出操作的非成员函数D.用于输入操作的非成员函数6.下列关于友元的描述中,错误的是(2分)A.如果函数fun()是类A的友元,那么在fun()中可以访问类A的私有成员B.如果类A是类B的友元,那么类B也是类A的友元C.如果类A是类B的友元,那么类A的所有成员函数都是类B的友元D.友元必须在类体内声明7.下列函数中,具有隐含的this指针的是(2分)classMyClass{public:intfun1();//①friendintfun3();//②staticvoidfun2();//③staticintcount;//④};A.①B.②C.③D.④8.已知函数f的原型是voidf(int*x,int&y);,变量v1、v2的定义是:intv1,v2;,下列调用语句中,正确的是(2分)A.f(v1,&v2);B.f(v1,v2);C.f(&v1,v2);D.f(&v1,&v2);9.抽象类至少包含一个(2分)A.友元函数B.纯虚函数C.虚函数D.虚析构函数10.下列关于静态成员的描述中,正确的是(2分)A.静态成员不属于对象,是类的共享成员B.静态数据成员要由构造函数初始化C.静态成员函数只能通过类激活D.非静态成员函数不能操作静态数据成员211.下列关于类和对象的描述中,正确的是(2分)A.一个类只能有一个对象B.类对象可以访问类的全部成员C.类和对象的关系是一种数据类型与变量的关系D.对象是对类的抽象12.下列对常类型的定义中,错误的是(2分)A.MyClassconstobj;B.charconst*ptr;C.constint&ref=10;D.voidfun()const;13.下列描述中,不是面向对象系统包含的要素的是(2分)A.对象B.类C.继承D.函数14.已知函数原型如下:intFun(intx,inty=2,intz=3),则下列函数调用错误的是(2分)A.Fun(4,5,6);B.Fun(1,2);C.Fun(1);D.Fun(1);15.下列关于类定义的描述中,错误的是(2分)A.类定义中包括数据成员和成员函数的声明B.类成员的默认访问权限是私有的C.可以在类体内对数据成员进行初始化D.成员函数必须在类体内声明16.有如下类定义,obj是类D的对象,下列语句中不违反访问控制权限的是(2分)classB{public:voidfun1();private:voidfun2();protected:voidfun3();};classD:publicB{protected:voidfun4();};A.obj.fun1();B.obj.fun2();C.obj.fun3();D.obj.fun4();17.下列对析构函数的描述中,正确的是(2分)A.系统不能提供默认的析构函数B.析构函数必须由用户定义C.析构函数没有参数D.析构函数可以设置默认参数18.已知函数原型为inttest(int,int,int);,则下列重载形式中正确的是(2分)A.chartest(int,int,int);B.doubletest(int,int,double);C.inttest(int,int,int=0);D.floattest(int,int,int);19.有如下声明:MyClass*constptr;,下列描述中,正确的是(2分)A.ptr是一个类对象B.ptr是一个常量指针C.ptr指向一个常量D.ptr是一个指向常量的常指针20.C++中,能够被派生类继承的函数是(2分)A.析构函数B.友元函数C.构造函数D.成员函数二、填空题(共10题,共20分)1.类的三种继承方式是______________、______________和______________。(2分)32.下列语句序列的输出结果是___________________。(2分)classMyClass{public:MyClass(intx=0){coutx;}~MyClass(){cout0;}};intmain(){MyClassarr[3]={MyClass(1),MyClass(2)};return0;}3.下列语句序列执行后输出10,请将划线处的语句补充完整。(2分)classMyClass{public:MyClass(intx):_____________________{}voidPrint(){coutvalendl;}private:intval;};intmain(){MyClassobj(10);obj.Print();return0;}4.请在划线处填写正确内容,使类Test的复制构造函数的声明完整。(2分)classTest{public:Test(const________________obj);};5.在C++中,________________是指同一个函数名可以对应多个函数的实现。(2分)6.请在划线处写出MyClass类的析构函数声明。(2分)classMyClass{public:_______________________};7.下列语句序列执行后输出Hello,请将划线处的语句补充完整。(2分)classMyClass{public:voidPrint()const{coutHello;}};intmain(){MyClass*p=newMyClass();Print();4return0;}8.运算符函数的函数名是由运算符前加关键字____________构成的。(2分)9.请在划线处填写构造函数的声明,使得语句Pointp1;创建的p1对象为原点。(2分)classPoint{public:_____________________________________private:intx,y;};10.有两个类M和C,其中类C定义如下:classC{public:Mm;};。若建立类C的对象object,则对象m和对象object中后被初始化的是对象_________________。(2分)三、改错题(共1题,共10分)下列程序中有三个错误,请改正错误(注意不要修改主函数),使程序的输出结果为:Kellyis10yearsold.Patrickis35yearsold.源文件清单如下:Line1:#includeiostream.hLine2:classPerson{Line3:public:Line4:Person(char*str,int_age=10):age(_age)Line5:{name=newchar[strlen(str+1)];strcpy(name,str);}Line6:void~Person(){delete[]name;}Line7:voidSetAge(intnum)const{age=num;}Line8:voidPrint()constLine9:{coutnameisageyearsold.endl;}Line10:private:Line11:char*name;Line12:intage=0;Line13:};Line14:intmain(){Line15:Personp1(Kelly),p2(Patrick,25);Line16:p1.Print();Line17:p2.SetAge(35);Line18:p2.Print();Line19:return0;Line20:}5四、阅读程序题(共4题,共30分)1.请写出下列程序的输出结果。(8分)#includeiostream.hclassPoint{public:Point(){number++;}~Point(){number--;coutnumberendl;}staticintGetNumber(){returnnumber;}private:staticintnumber;};intPoint::number=0;intmain(){PointA,B;Point*ptr=newPoint[3];coutPoint::GetNumber()endl;delete[]ptr;return0;}2.请写出下列程序的输出结果。(10分)#includeiostream.hclassBase1{public:Base1(){coutBase1endl;}~Base1(){cout~Base1endl;}};classBase2{public:Base2(){coutBase2endl;}~Base2(){cout~Base2endl;}};classDerived:publicBase2,publicBase1{public:Derived(){coutDerivedendl;}~Derived(){cout~Derivedendl;}private:Base2b2;Base1b1;};intmain(){Derivedd;return0;}63.请写出下列程序的输出结果。(6分)#includeiostream.hclassBase{public:virtualvoidf(){coutfBendl;}voidg(){coutgBendl;}};classDerived:publicBase{public:virtualvoidf(){coutfDendl;}voidg(){coutgDendl;}};intmain(){Derivedd;Base*p=&d;p-f();p-g();return0;}4.请写出下列程序的输出结果。(6分)#includeiostream.hclassMyClass{public:MyClass(intx):val(x){coutvalendl;}~MyClass(){cout'~'valendl;}intAdd(){val=2*val;returnval;}intAdd(intx){val=val+x;returnval;}voidPrint()const{coutvalendl;}private:intval;};intmain(){MyClassobj1(10),obj2(30);obj1.Add();obj2.Add(10);obj1.Print();obj2.Print();return0;}