第1页共8页攀枝花学院考试试卷2014~2015学年度第二学期《C++程序设计》试卷(A卷)一、判断题(每小题1分,共5分)1、抽象类可以实例化对象。()2、友元函数可以访问该类的私有数据成员。()3、C++语言支持封装性和继承性,不支持多态性。()4、纯虚函数是在抽象类中说明的虚函数,它在该抽象类中没有定义具体的操作内容。()5、析构函数和构造函数都能被继承。()二、选择题(每小题2分,共50分)1、在C++中,源程序变为可执行程序的正确顺序应该是()。A.编辑、链接、编译、执行B.编辑、编译、链接、执行C.编译、编辑、链接、执行D.编译、链接、编辑、执行2、下列关于C++与C语言的关系描述中,错误的是()。A.C语言是C++语言的一个子集B.C++与C语言是兼容的C.C++对C语言进行了一些改进D.C++和C语言都是面向对象的3、cout是I0流库预定义的()。A.类B.对象C.包含文件D.常量4、任意一个类,析构函数的个数最多是()。A.不限个数B.1C.2D.35、在函数定义前加上关键字“inline”表示该函数被定义为()。A.重载函数B.内联函数C.成员函数D.普通函数6、下面有关重载函数的说法中正确的是()。A.重载函数必须具有不同的返回值类型B.重载函数形参个数必须不同C.重载函数必须有不同的形参列表D.重载函数名可以不同7、编译时的多态性可以通过使用()获得。A.虚函数和指针B.重载函数和析构函数C.虚函数和对象D.虚函数和引用8、分析以下程序:#includeiostreamusingnamespacestd;voidfun(intnum)得分阅卷人得分阅卷人第2页共8页{coutnumendl;}voidfun(charch){cout(ch+1)endl;}intmain(){fun('A');return0;}以上程序的输出结果是()。A.65B.66C.AD.B9、函数定义为Fun(int&i),变量定义n=100,则下面调用正确的是()。A.Fun(20)B.Fun(20+n)C.Fun(n)D.Fun(&n)10、对于下面定义的类MyClass,在函数f()中将对象成员n的值修改为50的语句(划线处)应该是()。classMyClass{public:MyClass(intx){n=x;}voidSetValue(intn1){n=n1;}private:intn;};intf(){MyClass*ptr=newMyClass(45);__________;}A.MyClass(50)B.SetValue(50)C.ptr-SetValue(50)D.ptr-n=5011、构造函数不具备的特征的是()。A.构造函数的函数名与类名相同B.构造函数可以重载C.构造函数可以设置默认参数D.构造函数必须指定返回类型12、类的析构函数是在()被自动调用的。A.类创建时B.创建对象时C.删除对象时D.不自动调用13、通常,拷贝构造函数的参数是()。A.某个对象名B.某个对象的引用名C.某个对象的成员名D.某个对象的指针名14、下列关于类的访问权限的描述中,错误的是()。A.说明为公有的成员可以被程序中的任何代码访问B.说明为私有的成员只能被类的成员和说明为友元类的成员函数访问C.说明为保护的成员,除了能被本身的成员函数和说明为友元类的成员函数访问外,该类的派生类的成员也可以访问D.类的所有成员都可以被程序中的任何代码访问15、一个类的友元函数或友元类可以访问该类的()。A.私有成员B.保护成员C.公有成员D.所有成员16、C++中对于类中定义的成员,其默认的访问权限为()。A.publicB.protectedC.privateD.static17、下列特性中,C与C++共有的是()。A.继承B.封装C.多态性D.函数定义不能嵌套18、假定A为一个类,则执行AobjA;语句时将自动调用该类的()。A.有参构造函数B.无参构造函数C.拷贝构造函数D.赋值构造函数19、下列不是类的成员函数的是()。第3页共8页A.构造函数B.析构函数C.友元函数D.拷贝构造函数20、下面对静态数据成员的描述中,正确的是()。A.静态数据成员可以在类体内进行初始化B.静态数据成员不可以被类的对象调用C.静态数据成员不能受private控制符的作用D.静态数据成员可以直接用类名调用21、关于公有继承,下列说法错误的是()。A.基类的公有成员和保护成员被继承后作为派生类的公有成员和保护成员。B.派生类的其他成员可以直接访问基类的公有成员和保护成员。C.派生类的对象可以访问基类的私有成员。D.派生类成员和对象都无法访问基类的私有成员。22、下列虚基类的声明中,正确的是()。A.classvirtualB:publicAB.virtualclassB:publicAC.classB:publicAvirtualD.classB:virtualpublicA23、下面描述中,正确的是()。A.virtual可以用来声明虚函数B.含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类C.即使基类的构造函数没有参数,派生类也必须建立构造函数D.静态数据成员可以通过成员初始化列表来初始化24、如果一个类至少有一个纯虚函数,那么就称该类为()。A.抽象类B.虚函数C.派生类D.以上都不对25、以下()成员函数表示纯虚函数。A.virtualintvf(int);B.voidvf(int)=0;C.virtualvoidvf()=0;D.virtualvoidvf()=0{}三、填空题(每空1分,共5分)1、在定义类时,在类头中将使用关键字来表示类定义的开始。2、C++类的组成包括数据成员和,友元函数不是该类的成员函数3、静态成员属于,而不属于对象,它被同一个类的所有对象共享。4、从实现的角度来讲,多态性可以划分为两类:静态多态性和。5、如果只想保留共有基类的一个复制,就必须使用关键字把这个共有基类声明为虚基类。四、程序阅读题(每题4分,共20分)1、写出下列程序的运行结果#includeiostreamusingnamespacestd;classA{inta,b;public:A(){a=b=0;}得分阅卷人得分阅卷人第4页共8页A(intaa,intbb){a=aa;b=bb;couta''bbendl;}};voidmain(){Ax,y(2,3);}2、阅读下列程序,写出程序运行结果。#includeiostreamusingnamespacestd;classPerson{public:Person(){coutConstructorofPersonendl;}~Person(){coutDestructorofPersonendl;}};classStudent:publicPerson{public:Student(){coutConstructorofStudentendl;}~Student(){coutDestructorofStudentendl;}};classTeacher:publicPerson{public:Teacher(){coutConstructorofTeacherendl;}~Teacher(){coutDestructorofTeacherendl;}};intmain(){Students;Teachert;return0;}3、阅读下列程序,写出程序运行结果。#includeiostreamusingnamespacestd;classA{protected:intx,y;public:第5页共8页A(intm=5,intn=6){x=m,y=n;}};classB:publicA{protected:inti,j;public:B(inta,intb){i=a,j=b;}B(inta,intb,intm,intn):A(a,b){i=m,j=n;}voidprint(){coutxyijendl;}};intmain(){Bd(1,2);d.print();Bc(1,2,3,4);c.print();return0;}4、阅读下列程序,写出程序运行结果。#includeiostreamusingnamespacestd;classA{public:virtualvoidf(){coutA::fendl;}};classB{public:virtualvoidf(){coutB::fendl;}};classC:publicA,publicB{public:voidf(){coutC::fendl;}};intmain(){Aa;Bb;Cc;A*pa=&a;B*pb=&b;第6页共8页pa-f();pb-f();pa=&c;pb=&c;pa-f();pb-f();return0;}5、阅读下列程序,写出程序运行结果。#includeiostreamusingnamespacestd;intmain(){voidf1();try{f1();}catch(double){coutOK0!endl;}coutend0endl;return0;}voidf1(){voidf2();try{f2();}catch(int){coutOK1!;}coutend1endl;}voidf2(){doublea=0;try{throwa;}catch(char){coutOK2!endl;}coutend2endl;}五、程序填空题(每空2分,共6分)下列程序实现将数组a中的值写入一个二进制文件date.dat中,再从该二进制文件中反序读出数据,并输出到显示器。请在下划线处填入正确的程序代码。#includeiostream#includefstreamusingnamespacestd;得分阅卷人第7页共8页voidmain(void){inta[]={1,2,3,4,5};ofstreamoutfile(data.dat,①);for(inti=0;i5;i++){outfile.write((char*)&a[i],②);}outfile.close();ifstreaminfile(data.dat,ios::binary);intx;for(i=0;i5;i++){③;infile.read((char*)&x,sizeof(int));coutxendl;}infile.close();}六、编程题(共14分)1、(6分)定义一个如下图所示的ArrayM类找出整型数组中元素的最大值。ArrayM-array[20]:int-max:int+set_value():void+get_max():void+show_max():void2、(8分)实现一个复数类Complex,私有数据为实部Real和虚部Image要求Complex类包含如下成员函数:(1)有构造函数,缺省时实部Real和虚部Imag置为0;(2)voidSetReal(doublea)能修改Real的值,voidSetImag(doubleb)能修改Imag的值;(3)doubleGetReal()能取Real的值,doubleGetImag()能取Imag的值;(4)重载运算符+为Complex类的成员函数,实现两个复数的加法。(5)重载流插入运算符,实现对一个复数对象的输出,形如4+5i;3-4i;7;6i的输出形式。得分阅卷人