1诚信应考,考试作弊将带来严重后果!华南理工大学期末考试《高级语言程序设计(2)》试卷A注意事项:1.考前请将密封线内各项信息填写清楚;2.所有答案写在答题纸上,答在其它地方无效;3.试卷可做草稿纸,试卷必须与答题纸同时提交;4.考试形式:闭卷;5.本试卷共五大题,满分100分,考试时间120分钟。一.单项选择题(每题2分,共20分)1.在C++中,有关类和对象正确说法是(A)。A.对象是类的一个实例B.对象是类的存储空间C.一个类只能有一个对象D.类是程序包,对象是存储空间2.在类定义中,称为接口的成员是(C)。A.所有类成员B.private或protected的类成员C.public的类成员D.public或private的类成员3.一个类的友员函数能够通过(D)访问该类的所有成员。A.静态数据B.析构造函数C.this指针D.类对象参数4.下面描述错误的是(B)。A.自定义构造函数应该是公有成员函数B.构造函数可以是虚函数C.构造函数在建立对象时自动调用执行D.构造函数可以重载5.在类的继承关系中,基类的(B)成员在派生类中可见。A.所有B.public和protectedC.只有publicD.只有protected6.设B类是A类的派生类,有说明语句Aa,*ap;Bb,*bp;则以下正确语句是(C)。A.a=b;B.b=a;C.ap=&b;D.bp=&a;7.C++中,以下(D)语法形式不属于运行时的多态。A.根据if语句的求值决定程序流程B.根据基类指针指向对象调用成员函数C.根据switch语句的求值决定程序流程D.根据参数个数、类型调用重载函数8.假设对A类定义一个重载“+”号运算符的成员函数,以便实现两个A类对象的加法,并返回相加结果,则该成员函数的函数原型为(B)。A.Aoperator+(constA&A1,constA&A2);B.AA::operator+(constA&A2);C.A::operator+(A&A2);D.AA::operator+();9.一个类模板定义了静态数据成员,则(A)。A.每一个实例化的模板类都有一个自己的静态数据成员。B.每一个实例化的对象都有一个自己的静态数据成员。C.它的类型必须是类模板定义的抽象类型。D.所有模板类的对象公享一个静态数据成员。10.读一个C++数据文件,要创建一个(A)流对象。A.ifstreamB.ofstreamC.cinD.cout二.简答题(每小题4分,共20分)_____________________…姓名学号学院专业座位号(密封线内不答题)……………………………………………………密………………………………………………封………………………………………线……………………………………线………………………………………《高级语言程序设计(C++II)》试卷第2页共9页1.有右图所示类格。类X中有数据成员inta。根据以下函数注释的编译信息,分析intX::a的访问特性,classY对classX和classZ对classY的继承性质。voidY::funY(){coutaendl;}//正确voidZ::funX(){coutaendl;}//错误voidmain(){Xx;Yy;Zz;coutx.aendl;//正确couty.aendl;//错误coutz.aendl;//错误}intX::a是classX的public数据成员,classY为protected继承classX,classZ为private继承classY。2.有人定义一个教师类派生一个学生类。他认为“姓名”和“性别”是教师、学生共有的属性,声明为public,“职称”和“工资”是教师特有的,声明为private。在学生类中定义特有的属性“班级”和“成绩”。所以有classteacher{public:charname[20];charsex;private:chartitle[20];doublesalary;};classstudent:publicteacher{private:chargrade[20];intscore;};你认为这样定义合适吗?请做出你认为合理的类结构定义。classperson{public:charname[20];charsex;};classteacher:publicperson{private:chartitle[20];doublesalary;};classstudent:publicperson{private:chargrade[20];intscore;};3.有类定义classTest{inta,b;public:Test(intm,intn){a=m;b=n;}voidSet(intm,intn){a=m;b=n;}classXclassYclassZ《高级语言程序设计(C++II)》试卷第3页共9页//……};有人认为“Test和Set函数的功能一样,只要定义其中一个就够了”。这种说法正确吗?为什么?带参数的构造函数用于建立对象数据初始化,成员函数用于程序运行时修改数据成员的值。4.若有声明templatetypenameTclassTclass{/*……*/};建立一个Tclass对象用以下语句TclassTobj;有错误吗?若出错,请分析原因,并写出一个正确的说明语句。没有实例化类属参数。TclassTobjint;5.C++的文本文件可以用binary方式打开吗?若有以下语句fstreamof(d:testfile,ios::out|ios::binary);doublePI=3.1415;请写出把PI的值写入文件d:testfile末尾的语句。可以。of.seekp(0,ios::end);of.write((char*)&PI,sizeof(double));三.阅读下列程序,写出执行结果(每题6分,共24分)1.#includeiostream.h//运算符重载enumBoolConst{False=0,True=1};//定义枚举类型classBoolean{public:Boolean(BoolConstx=False){logic=x;}voidprint()const{logic?coutTRUE:coutFALSE;}friendBooleanoperator+(constBoolean&obj1,constBoolean&obj2);friendBooleanoperator*(constBoolean&obj1,constBoolean&obj2);protected:BoolConstlogic;};Booleanoperator+(constBoolean&obj1,constBoolean&obj2){return(obj1.logic||obj2.logic)?Boolean(True):Boolean(False);}Booleanoperator*(constBoolean&obj1,constBoolean&obj2){return(obj1.logic&&obj2.logic)?Boolean(True):Boolean(False);}voidmain(){Booleana(False),b(True),c,d;c=a*b;d=a+b;a.print();b.print();c.print();d.print();coutendl;}FALSETRUEFALSETRUE《高级语言程序设计(C++II)》试卷第4页共9页2.#includeiostream.h//模板,静态数据成员templatetypenameTclassList{public:List(Tx=0){data=x;}voidappend(List*node){node-next=this;next=NULL;total++;}List*getnext(){returnnext;}Tgetdata(){returndata;}staticinttotal;private:Tdata;List*next;};templatetypenameTintListT::total=0;voidmain(){inti,n=5;Listintheadnode;Listint*p,*last;last=&headnode;for(i=1;i=n;i++){p=newListint(i*2);p-append(last);last=p;}p=headnode.getnext();while(p){coutp-getdata();p=p-getnext();}coutendl;couttotal=Listint::totalendl;}246810Total=53.#includeiostream.h//类成员#includemath.hclassPoint{public:Point(intx1=0,inty1=0){x=x1;y=y1;coutPoint构造函数\n;}intGetX(){returnx;}intGetY(){returny;}private:intx;inty;};classDistance{public:《高级语言程序设计(C++II)》试卷第5页共9页Distance(Pointxp1,Pointxp2);doubleGetDis(){returndist;}private:Pointp1;Pointp2;doubledist;};Distance::Distance(Pointxp1,Pointxp2):p1(xp1),p2(xp2){coutDistance构造函数\n;doublex=double(p1.GetX()-p2.GetX());doubley=double(p1.GetY()-p2.GetY());dist=sqrt(x*x+y*y);}voidmain(){Pointmyp1(0,0),myp2(0,20);Distancemydist(myp1,myp2);coutThedistanceismydist.GetDis()endl;}Point构造函数Point构造函数Distance构造函数Thedistanceis204.写出data.txt中的结果和屏幕显示的结果。#includefstream.hvoidmain(){inta=10;doublex=50.5;charstr[10],fname[20]=d:\\data.txt;fstreamiofile(fname,ios::out);if(!iofile)return;iofileData:\ta+10xendl;iofile.close();iofile.open(fname,ios::in);if(!iofile)return;iofilestrax;coutstring=str\na=a,x=xendl;}?Data.txtData:2050.5输出string=Data:a=20,x=50.5四.根据程序输出填空。(每空2分,共24分)1.//成员和友员《高级语言程序设计(C++II)》试卷第6页共9页#includeiostream.hclassTime{public:Time(inth,intm){hours=h;minutes=m;}________(1)________Time12();void________(2)________Time24(Timetime);friendvoidprivate:inthours,minutes;};_________(3)__________Time12()voidTime::{if(hours12){couthours