11一、选择题1.C++语言属于(C)。A)自然语言B)机器语言C)面向对象语言D)汇编语言2.下面选项中不属于面向对象程序设计特征的是(C)。A)继承性B)多态性C)相似性D)封装性3.可用作C++语言用户标识符的一组标识符是(B)。A)voiddefine+WORDB)a3_b3_123YNC)for-abcCaseD)2aDOsizeof4.假定一个二维数组的定义语句为“inta[3][4]={{3,4},{2,8,6}};”,则元素a[2][1]的值为(A)。A)0B)4C)8D)65.下列情况中,哪一种情况不会调用拷贝构造函数(B)A)用派生类的对象去初始化基类对象时B)将类的一个对象赋值给该类的另一个对象时C)函数的形参是类的对象,调用函数进行形参和实参结合时D)函数的返回值是类的对象,函数执行返回调用者时6.以下哪一关键字可用于重载函数的区分(C)A)externB)staticC)constD)virtual7.下列有关数组的叙述中,正确的是(B)A)C++中数组的存储方式为列优先存储B)数组名可以作为实参赋值给指针类型的形参C)数组下标索引从1开始,至数组长度n结束D)数组指针的语法形式为:类型名*数组名[下标表达式];8.下列有关继承和派生的叙述中,正确的是(C)A)派生类不能访问通过私有继承的基类的保护成员B)多继承的虚基类不能够实例化C)如果基类没有默认构造函数,派生类就应当声明带形参的构造函数D)基类的析构函数和虚函数都不能够被继承,需要在派生类中重新实现9.实现运行时多态的机制是(A)A)虚函数B)重载函数C)静态函数D)模版函数10.若有下面的函数调用:22fun(a+b,3,max(n-1,b));其中实参的个数是(A)A)3B)4C)5D)611.下列关于this指针的说法正确的是(B)A)this指针存在于每个函数之中B)在类的非静态函数中this指针指向调用该函数的对象C)this指针是指向虚函数表的指针D)this指针是指向类的函数成员的指针12.在下列关于C++函数的叙述中,正确的是(C)A)每个函数至少要有一个参数B)每个函数都必须返回一个值C)函数在被调用之前必须先声明D)函数不能自己调用自己13.下列运算符中,不能重载的是(C)A)&&B)!=C).D)-14.下面程序的输出结果是(B)#includeiostreamusingnamespacestd;inti=0;intfun(intn){staticinta=2;a++;returna+n;}voidmain(){intk=5;{inti=2;k+=fun(i);}k+=fun(i);coutk;}A)13B)14C)15D)1615.下面的程序段的运行结果为(D)charstr[]=job,*p=str;cout*(p+2)endl;A)98B)无输出结果C)字符’b’的地址D)字符’b’3316.下面程序的输出结果是(C)#includeiostreamusingnamespacestd;classA{public:A(inti){x=i;}voiddispa(){coutx“,”;}private:intx;};classB:publicA{public:B(inti):A(i+10){x=i;}voiddispb(){dispa();coutxendl;}private:intx;};voidmain(){Bb(2);b.dispb();}A)10,2B)12,10C)12,2D)2,217.下面程序的输出结果是(C)#includeiostreamusingnamespacestd;classBase{public:Base(inti){couti;}~Base(){}};classBase1:virtualpublicBase{public:Base1(inti,intj=0):Base(j){couti;}~Base1(){}};classBase2:virtualpublicBase{44public:Base2(inti,intj=0):Base(j){couti;}~Base2(){}};classDerived:publicBase2,publicBase1{public:Derived(inta,intb,intc,intd):mem1(a),mem2(b),Base1(c),Base2(d),Base(a){coutb;}private:Base2mem2;Base1mem1;};voidmain(){DerivedobjD(1,2,3,4);}A)134122B)123412C)14302012D)14321218.下面程序的输出结果是(C)#includeiostreamusingnamespacestd;classBase{public:virtualvoidf(){cout“f0+”;}voidg(){cout“g0+”;}};classDerived:publicBase{public:voidf(){cout“f+”;}voidg(){cout“g+”;}};voidmain(){Derivedd;Base*p=&d;p-f();p-g();}A)f+g+B)f0+g+C)f+g0+D)f0+g0+19.下面程序的输出结果是(C)#includeiostreamusingnamespacestd;classSample{friendlongfun(Samples){55if(s.x2)return1;returns.x*fun(Sample(s.x-1));}public:Sample(longa){x=a;}private:longx;};voidmain(){intsum=0;for(inti=0;i4;i++){sum+=fun(Sample(i));}coutsum;}A)12B)16C)10D)3420.以下程序的输出结果是:(D)#includeiostreamusingnamespacestd;intfun(char*s){char*p=s;while(*p!='\0')p++;return(p-s);}voidmain(){coutfun(abc)endl;}A.0B.1C.2D.321.有如下程序段:inti=1;while(1)66{i++;if(i==10)break;if(i%2==0)cout’*’;}执行这个程序段输出字符*的个数是(C)A.10B.3C.4D.522.下列关于虚基类的描述中,错误的是(C)A.使用虚基类可以消除由多继承产生的二义性B.构造派生类对象时,虚基类的构造函数只被调用一次C.声明classB:virtualpublicA说明类B为虚基类D.建立派生类对象时,首先调用虚基类的构造函数23.有下类定义ClassA{Char*a;Public:A():a(0){}A(char*aa){//把aa所指字符串拷贝到a所指向的存储空间A=___________________;Strcpy(a,aa);~A(){delete[]a;}};正确的选择是(A)A.newchar[strlen(aa)+1]B.char[strlen(aa)+1]C.char[strlen(aa)]D.newchar[sizeof(aa)-1]24.假定AA为一个类,a为该类私有的数据成员,GetValue()为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的格式为(X)。A)x.aB)x.a()C)x-GetValue()D)x.GetValue()25.假定AA为一个类,inta()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为(A)。A)intAA::a()B)intAA:a()77C)AA::a()D)AA::inta()26.有如下程序:#includeiostreamusingnamespacestd;classTest{public:Test(){}~Test(){cout'#';}};intmain(){Testtemp[2],*pTemp[2];return0;}执行这个程序输出星号(#)的个数为(B)。A)1B)2C)3D)427.有如下程序:#includeiostreamusingnamespacestd;classMyClass{public:MyClass(inti=0){cout1;}MyClass(constMyClass&x){cout2;}MyClass&operator=(constMyClass&x){cout3;return*this;}~MyClass(){cout4;}};intmain(){MyClassobj1(1),obj2(2),obj3(obj1);obj1=obj2;return0;}运行时的输出结果是(A)。A)1123444B)11114444C)121444D)1131444428.有如下程序:88#includeiostreamusingnamespacestd;classpoint{public:staticintnumber;public:point(){number++;}~point(){number--;}};intpoint::number=0;voidmain(){point*ptr;pointA,B;{point*ptr_point=newpoint[3];ptr=ptr_point;}pointC;delete[]ptr;coutpoint::number;}程序结果为(A)A)3B)4C)6D)729.友元运算符obj++被C++编译器解释为(D)。A.operator++(obj)B.operator++(obj,0)B.obj.operator++()D.obj.operator++(0)二、程序填空1.用递归法求从1到n的立方和:f(1)=1(n=1)f(n)=f(n-1)+n3(n1)99#includeiostreamusingnamespacestd;intf(int);intmain(){intn,s;coutinputthenumbern:;cinn;s=f(n);coutTheresultissendl;return0;}intf(intn){//递归法求立方和函数if(n==1)return1;elsereturn(f(n-1)+n*n*n);}3.请将下列程序补充完整,使得输出结果为“DestructorDerivedDestructorBase”。#includeiostreamusingnamespacestd;classBase{public:virtual~Base(){cout“DestructorBase”endl;}};classDerived:publicBase{public:~Derived(){cout“DestructorDerived”endl;}};voidmain(){Base*pBase=newDerived;deletepBase;}1010三、阅读程序,写出运行结果1.#includeiostream#includecstringusingnamespacestd;classCD{charname[20];intnumber;public:voidInit(char*aa,intbb){strcpy(name,aa);number=bb;}char*Getname(){returnname;}intGetnumber(){returnnumber;}voidOutput(){coutname''numberendl;}};CDdx;voidmain()