一、选择题1.C++语言属于(C)。
A)自然语言B)机器语言C)面向对象语言D)汇编语言2.下面选项中不属于面向对象程序设计特征的是(C)。
A)继承性B)多态性C)相似性D)封装性3.下列情况中,哪一种情况不会调用拷贝构造函数(B)A)用派生类的对象去初始化基类对象时B)将类的一个对象赋值给该类的另一个对象时C)函数的形参是类的对象,调用函数进行形参和实参结合时D)函数的返回值是类的对象,函数执行返回调用者时4.以下哪一关键字可用于重载函数的区分(C)A)extern B)static C)const D)virtual5.下列有关数组的叙述中,正确的是(B)A)C++中数组的存储方式为列优先存储B)数组名可以作为实参赋值给指针类型的形参C)数组下标索引从1开始,至数组长度n结束D)数组指针的语法形式为:类型名*数组名[下标表达式];6.下列有关继承和派生的叙述中,正确的是(C)A)派生类不能访问通过私有继承的基类的保护成员B)多继承的虚基类不能够实例化C)如果基类没有默认构造函数,派生类就应当声明带形参的构造函数D)基类的析构函数和虚函数都不能够被继承,需要在派生类中重新实现7.若有下面的函数调用:fun(a+b,3,max(n-1,b));其中实参的个数是(A)A)3 B)4 C)5 D)68.下列关于this指针的说法正确的是(B)A)this指针存在于每个函数之中B)在类的非静态函数中this指针指向调用该函数的对象C)this指针是指向虚函数表的指针D)this指针是指向类的函数成员的指针9.在下列关于C++函数的叙述中,正确的是(C)A)每个函数至少要有一个参数B)每个函数都必须返回一个值C)函数在被调用之前必须先声明D)函数不能自己调用自己10.下列运算符中,不能重载的是(C)A)&& B)!= C). D)->11.下面程序的输出结果是(B)#include<iostream>usingnamespacestd; inti=0;intfun(intn){staticinta=2;a++;returna+n;}voidmain(){intk=5;{inti=2;k+=fun(i);}k+=fun(i);cout<<k;}A)13 B)14 C)15 D)16 12.下面程序的输出结果是(C)#include<iostream>usingnamespacestd;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+ 13.以下程序的输出结果是:(D)#include<iostream>usingnamespacestd;intfun(char*s){char*p=s;while(*p!='\0')p++;return(p-s);}voidmain(){cout<<fun("abc")<<endl;}A.0B.1 C.2D.3 14.有如下程序段:inti=1;while(1){i++;if(i==10)break;if(i%2==0)cout<<’*’;}执行这个程序段输出字符*的个数是(C)A.10B.3C.4D.515.下列关于虚基类的描述中,错误的是(C)A. 使用虚基类可以消除由多继承产生的二义性B. 构造派生类对象时,虚基类的构造函数只被调用一次C. 声明classB:virtualpublicA说明类B为虚基类D. 建立派生类对象时,首先调用虚基类的构造函数16.有下类定义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]17.有如下程序:#include<iostream>usingnamespacestd;classTest{public:Test(){}~Test(){cout<<'#';}};intmain(){Testtemp[2],*pTemp[2];return0;}执行这个程序输出星号(#)的个数为(B)。
A)1B)2 C)3D)418.友元运算符obj++被C++编译器解释为(D)。
A.operator++(obj)B.operator++(obj,0)B.obj.operator++()D.obj.operator++(0)19.下面程序的运行结果为(C)#includeclassA{intnum;public:A(inti){num=i;}A(A&a){num=a.num++;}voidprint(){cout<<NUM;}<p>};voidmain(){Aa(1),b(a);a.print();b.print();}A.11B.12C.21D.2220.如果类A被说明成类B的友元,则(D)A.类A的成员即类B的成员B.类B的成员即类A的成员C.类A的成员函数不得访问类B的成员D.类B不一定是类A的友元21.下面程序的运行结果是(C)#includevoidmain(){intnum=1;int&ref=num;ref=ref+2;cout<<NUM;<p>num=num+3;cout<<REF<<ENDL;<p>}A.13B.16C.36D.3322.下列程序的运行结果为(C)#includeinti=0;classA{public:A(){i++;}};voidmain(){ Aa,b[3],*c;c=b;cout<<I<<ENDL;}A.2B.3C.4D.523.下列字符串中可以用C++语言标识符的是(A)A._1234B.foo~~barC.virtuaD.34var二填空题1.在面向对象方法中,类之间共享属性和操作的机制称为继承2.C++中封装性、继承性和多态性是面向对象思想的主要特征。
3.下列for语句的循环次数为5。
for(inta=0,b=1;b&&a<5;a++);4.C++程序是从main函数开始执行的。
5.派生类构造函数的执行顺序是先执行基类的构造函数,然后执行成员对象的构造函数,最后执行派生类的构造函数。
三程序填空1.用递归法求从1到n的立方和:f(1)=1(n=1)f(n)=f(n-1)+n3(n>1)#include<iostream>usingnamespacestd;intf(int);intmain(){intn,s;cout<<"inputthenumbern:";cin>>n;s=f(n);cout<<"Theresultis"<<s<<endl;return0;}intf(intn){//递归法求立方和函数if(n==1)return1;elsereturn(f(n-1)+n*n*n);}3.请将下列程序补充完整,使得输出结果为“DestructorDerivedDestructorBase”。
#include<iostream>usingnamespacestd;classBase{public:virtual~Base(){cout<<“DestructorBase”<<endl;} };classDerived:publicBase{public:~Derived(){cout<<“DestructorDerived”<<endl;}};voidmain(){Base*pBase=newDerived;deletepBase;}。