一、选择题1、C++对C语言作了很多改进,下列描述中()使得C语言发生了质变,从面向过程变成了面向对象。A、增加了一些新的运算符;B、允许函数重载,并允许设置缺省参数;C、规定函数说明必须用原型;D、引进了类和对象的概念;2.如果一个类X只有一个构造函数X(int),以下对象声明哪一个正确?()a.Xx;b.Xx[5];c.Xx(5);d.Xx(5);3.若一个类中定义成员,但没有显式规定其访问权限,其默认的权限是()。A、privateB、publicC、protectedD、都不对4.类的成员函数能够直接访问所在类中定义的成员为()。A、只是数据成员B、只是函数成员C、数据成员和函数成员D、都不能5有关构造函数说法不正确的是()A构造函数的名字和类的名字一样。B在创建对象时,系统自动调用构造函数C构造函数无任何函数返回类型D构造函数有且只有一个6.对于任意一个类,析构函函数的个数最多为()个。A0B1C2D37()不是构造函数的特征。A、构造函数应声明为公有函数,但它不能象其他成员函数被显示地调用.B、构造函数可以重载;C、构造函数可以设置缺省参数;D、构造函数必须指定返回类型说明。8、下列关于析构函数说法不正确的是()A、当撤销对象时,编译系统会自动调用析构函数B、析构函数的名字必须是类名前面加上一个波浪号~C、析构函数没有参数,也没有返回值,而且不能重载,因此一个类中只能有一个析构函数。D、一个类必须定义析构函数,不能缺省。9.下列静态数据成员的特性中,()是错误的。A、说明静态数据成员时前边要加修饰符static;B、静态数据成员要在类体外进行初始化;C、静态数据成员不是所有对象所共用的;D、引用静态数据成员时,要在其名称前加类名和作用域运算符;10、关于new运算符的下列描述中,()是错误的。A、它可以用来动态创建对象和对象数组;B、使用它创建的对象或对象数组可以使用运算符delete删除;C、使用它创建对象时要调用构造函数;D、使用它创建对象数组时必须指定初始值;11、派生类的对象对它的基类成员中()是可以访问的。A、公有继承的公有成员;B、公有继承的私有成员;C、公有继承的保护成员;D、私有继承的公有成员;12、设置虚基类的目的是()。A、简化程序;B、消除二义性;C、提高运行效率;D、减少目标代码;13、下列描述中,正确的是()A、虚函数是一个static类型的成员函数;B、虚函数是一个非成员函数;C、抽象类是指具有纯虚函数的类;D、抽象类可以说明其对象;14、如果在基类中将show声明为不带返回值的纯虚函数,正确的写法是()A.virtualshow()=0;B.virtualvoidshow();C.virtualvoidshow()=0;D.voidshow=0virtual;15、下列关于纯虚函数与抽象类的描述中,错误的是()A.纯虚函数是一种特殊的函数,它允许没有具体的实现。B.抽象类是指具有纯虚函数的类。C.一个基类的说明中有纯虚函数,该基类的派生类一定不再是抽象类。D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出。16、有关运算符重载正确的描述是()A.C++语言允许在重载运算符时改变运算符的操作个数B.C++语言允许在重载运算符时改变运算符优先级C.C++语言允许在重载运算符时改变运算符的结合性D.C++语言允许在重载运算符时改变运算符原来的功能17、能用友元函数重载的运算符是()A.+B.=C.[]D.-18、下列函数支持this指针的是()A.类的构造函数与析构函数B.类中的友元函数C.类中的静态数据成员D.main()函数19、假设定义了模板templateclassTTmax(Tx,Ty){return(xy)?x:y;}并定义了inti;charc;错误的调用语句是():A.max(i,i);B.max(c,c);C.max((int)c,i);D.max(i,c);20、模板的使用是为了()A.提高代码的可重用性B.提高代码的运行效率C.加强类的封装性D.实现多态性21、基类A,派生类B私有继承了A,在B类中如要将A类的成员函数voidprint()访问声明为公有,则下列写法正确的是A.public:voidA::print;B.public:A::print();C.public:voidA::print();D.public:A::print;22、假设定义了模板templateclassTTmax(Tx,Ty){return(xy)?x:y;}并定义了inti;charc;错误的调用语句是():A.”max(i,i)”;B.”max(c,c);”;C.“max((int)c,i)”;D.”max(i,c)”;23、模板的使用是为了()A.提高代码的可重用性B.提高代码的运行效率C.加强类的封装性D.实现多态性二、判断下列描述的正确性,正确填T,错误填F。1、C++中标识符内的大小写字母是没有区别的。()2、使用关键字class定义的类中缺省的访问权限是私有(private)的。()3、类的私有成员只能被类中的成员函数访问,任何类以外的函数对它们的访问都是非法的。()4、多继承情况下,派生类的构造函数的执行顺序取决于成员初始化列表中的顺序。()5、在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。()6、在私有继承中,基类中所有成员对派生类都是不可见的。()7、构造函数可以声明为虚函数。()8、类(AA)中的友元类(BB)的所有成员函数可以存取或修改该类(AA)中的公有成员,不能存取或修改该类(AA)中的私有成员。()9、对象、指向对象的指针及对象的引用都可以作函数参数,但使用对象引用作函数参数更普遍些。()10、多重继承中处于同一层次的各个基类构造函数的执行顺序,取决于成员初始化列表的顺序而与声明派生类时所指定的各个基类的顺序无关。()11、构造函数不能是虚函数,但析构函数可以是虚函数。()12、基类的构造函数和析构函数不能被继承。()13、抽象类即可以建立普通对象,又可以建立抽象类的指针或引用,此指针可以指向它的派生类。()14、若抽象类的派生类中没有重新说明纯虚函数,则这个派生类也是一个抽象类。()三、填空题1.和C语言相比,C++是面向程序设计语言。将数据和操纵数据的函数封装在一起的数据类型称作。2.非成员函数应声明为类的才能访问这个类的private成员。3.c++中,表示公有的关键字是,表示保护的关键字是。4.在说明类的一个对象时,系统自动调用其。5.定义重载函数时,应在函数形参中的或有所不同。6、假定AB为一个类,则执行“ABa[10];”语句时,系统自动调用该类的构造函数的次数为。7、假定类AB中有一个私有属性的静态(static)数据成员intbb,在类外为其附初值为0的写法是。8、A类私有继承B类的写法是。9.含有纯虚函数的类称为。10、是指用一个名字定义不同的函数,这些函数执行不同但又有类似的操作,即用同样的接口访问功能不同的函数,从而实现“一个接口,多种方法”。11、函数实现了函数参数的通用性,作为一种代码的重用机制,可以大幅度地提高设计的效率。12、类模板不代表一个具体的,实际的类,而代表着一类类。四、程序完型1.在下面的横线处填上适当的语句,使其输出结果为25,10。usingnamespacestd;classlocation{intX,Y;public:_voidinit(intk,intt);intgetX(){returnX;}intgetY(){returnY;}};voidlocation::init(intk,intt){X=k;Y=t;}voidmain(){locationa;a.init(25,10);_couta.getX()”,”a.getY()endl__;//输出对象a的数据成员X和Y的值}例2:在横线处填写合适的语句,完成类模板对平面上的点的初始化.templateclassTypeclasscpoint{private:Typex,y;public:voidsetpoint(Typea,Typeb);voidshow(){coutx=xy=y;}};templateclassTypevoidcpointType::setpoint(Typea,Typeb){`x=a;y=b;}voidmain(){inta=2,b=3;cpointintop1;op1.setpoint(a,b);floatp=2.2,q=3.3;cpointfloatop2;op2.setpoint(p,q);}五、程序分析例1classSample{public:intx,y;Sample(){x=y=0;}Sample(inta,intb){x=a;y=b;}voiddisp(){coutx=x,y=yendl;}};voidmain(){Samples1(2,3);s1.disp();}例2classA{public:intn;};classB:publicA{};voidmain(){Aa;Bb;a.n=20;b.n=10;coutb.n,a.nendl;}例3classE{intx;staticinty;public:E(inta){x=a;y+=x;}voidshow(){coutx’,’y’\n’;}};intE::y=100;voidmain(){Ee1(10),e2(50);e1.show();}A.50,160B10,160C50,110D.10,110例4以下程序的数据结果是()classSample{staticinti;public:voidset(intx){i=x;}Sample(inti){this-i+=i;}staticdisp(){couti;}};intSample::i=100;voidmain(){Samples(10);Sample::disp();}A.20B.10C.120D.110例5以下程序输出结果是()#include“iostream.h”classA{intx;public:staticvoidsetx(inta){x+=a;}A(inta){x=a;}voiddisp(){coutx;}};voidmain(){Aa(10),b(20);A::setx(100);a.disp();}A.100B.110C.10D.程序有错误,不能编译例6以下程序执行的输出结果是()classSample{intA;staticintB;public:Sample(inta){A=a;B+=a;}staticvoidfunc(Sample&s);};voidSample::func(Sample&s){coutA=s.A,B=Bendl;}intSample::B=0;voidmain(){Samples1(2),s2(5);Sample::func(s1);Sample::func(s2);}例7以下程序执行的输出结果是()#includeiostream.hclassSample{intn;public:Sample(inti){n=i;}friendintadd(Sample&s1,Sample&s2);};intadd(Sample&s1,Sample&s2){returns1.n+s2.n;}voidmain(){Samples1(10),s2(20);coutadd(s1,s2)endl;}例8以下程序执行的输出结果是()#includeiostream.hclassA;classB{inti;public:B(intx){i=x;}friendA;};classA{inti;public:intset(B&);intget(){returni;}A(intx){i=++x;}};intA::s