版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGE第1页(共12页)上海大学上海大学2004~2005学年冬季学期试卷(A卷)课程名:高级语言程序设计(二)学分:4(闭卷)参考答案学号:______姓名:_______院、系:_________题号一(20)二(20)三(15)四(30)五(15)得分一.填空题(每空1分,共20分)1.填空,使程序中的max()函数、函数模板返回参数中较大者,并指出运行结果。#include<iostream.h>#include<string.h>template<classT>①Tmax(Tx,Ty){ if(x>y) ②returnx; else ③returny;}//为了使max()函数还能处理字符串的内容,重载该模板④char*max(char*x,char*y){ if(⑤strcmp(x,y)>0) returnx; else returny;}voidmain(){ cout<<max(3,5)<<endl; cout<<max(3.5,5.5)<<endl; cout<<max(’b’,’a’)<<endl; cout<<max(”abc”,”abcd”)<<endl; cout<<max(”xyz”,”xyz”)<<endl;}运行结果: ⑥5 ⑦5.5 ⑧b ⑨abcd ⑩xyz成成绩得分得分第2页(共12页)2.填空,完成如下的Point类模板。2.填空,完成如下的Point类模板。#include<iostream.h>①template<classT>classPoint{②public: Point(Tx,Ty) { ③_x=x; ④_y=y; } voidSetPoint(⑤Tx,⑥Ty) { _x=x; _y=y; } voidDisplay() { cout<<”(”<<_x<<”,”<<_y<<”)”<<endl; }protected: T_x,_y;};voidmain(){ Point<int>a(-1,2); Point<unsignedint>b(1,2); Point<char>c(’a’,’b’); Point<double>d(3.5,5.5); a.Display(); b.Display(); c.Display(); d.Display();}运行结果: ⑦(-1,2) ⑧(1,2) ⑨(a,b) ⑩(3.5,5.5)第3页(共12页)得分得分二.(共20分)完成类成员函数定义,并回答问题。#include<iostream.h>classRMB{public: RMB(unsignedintx=0); //本函数定义为第1小题 voidDisplay(); //本函数定义为第2小题 operatorunsignedint(){return100*yuan+10*jiao+fen;}//类型转换函数,可将RMB类型的对象转换成unsignedint类型数据 friendostream&operator<<(ostream&oo,RMB&r) { oo<<r.yuan<<”元”<<r.jiao<<”角”<<r.fen<<”分”; returnoo; } friendRMBoperator+(RMB&r1,RMB&r2) { unsignedintn=(unsignedint)r1+(unsignedint)r2; RMBresult(n); returnresult; } friendRMB&operator++(RMB&rmb) { rmb.fen++; if(rmb.fen==10) { rmb.jiao++; rmb.fen=0; } if(rmb.jiao==10) { rmb.yuan++; rmb.jiao=0; } returnrmb; } friendRMBoperator++(RMB&rmb,int) { RMBtemp=rmb; rmb.fen++; if(rmb.fen==10) { rmb.jiao++; rmb.fen=0; }第4页(共12页) if if(rmb.jiao==10) { rmb.yuan++; rmb.jiao=0; } returntemp; }protected: unsignedintyuan,jiao,fen;};voidmain(){ RMBrmb(12345); cout<<rmb<<endl; cout<<++(++rmb)<<endl; cout<<rmb++<<endl; cout<<rmb<<endl;}完成构造函数的定义。其中,形式参数是一个以人民币“分”为单位的整型量表示金额总数(如,“12345分”为“123元4角5分”),要求根据该形式参数正确地完成数据成员yuan(元),jiao(角),fen(分)的初始化。RMB::RMB(unsignedintx){ yuan=x/100; jiao=x/10%10; fen=x%10;}完成成员函数Display()的定义。voidRMB::Display(){ cout<<*this;//或cout<<yuan<<”元”<<jiao<<”角”<<fen<<”分”;}前增量运算是否可以用作左值表达式?说明为什么后增量运算不能作为左值表达式。答:前增量元算可以用作左值表达式。后增量运算是值返回,为一临时对象,而不是参与运算的对象本身,故后增量运算不能用作左值表达式。写出程序的运行结果。123元4角5分123元4角7分123元4角7分123元4角8分
第5页(共12页)得分得分三.阅读程序(共15分)#include<iostream.h>#include<string.h>classAnimal{public: Animal(intw=0,inta=0) { cout<<"ConstructinganAnimal."<<endl; weight=w; age=a; } virtual ~Animal() { cout<<"DestructinganAnimal."<<endl; } voidPrint() { cout<<"[ANIMAL]"; //此处无换行 } virtualvoidShow() { cout<<"AnAnimal("<<weight<<"Kg," <<age<<"yearsold)."<<endl; }protected: intweight,age;};classCat:publicAnimal{public: Cat(char*pName="NoName",intw=0,inta=0):Animal(w,a) { name=newchar[strlen(pName)+1]; strcpy(name,pName); cout<<"ConstructingaCat,"<<name<<"created."<<endl; } ~Cat() { cout<<"DestructingaCat,"<<name<<"deleted."<<endl; deletename; } voidPrint() { cout<<"[CAT]"; //此处无换行 } voidShow() { cout <<name<<",acat("<<weight<<"Kg," <<age<<"yearsold).Meow..."<<endl; }protected: char*name;};第6页(共12页)voidvoidmain(){ Animal*pa; Cat*pc; pa=newCat(”Tom”,1,2); pc=newCat(”Frisky”,3,4); pa->Print();pa->Show(); pc->Print();pc->Show(); deletepa; deletepc;}(10分)写出运行结果。ConstructinganAnimal.ConstructingaCat,Tomcreated.ConstructinganAnimal.ConstructingaCat,Friskycreated.[ANIMAL]Tom,acat(1Kg,2yearsold).Meow...[CAT]Frisky,acat(3Kg,4yearsold).Meow...DestructingaCat,Tomdeleted.DestructinganAnimal.DestructingaCat,Friskydeleted.DestructinganAnimal.(5分)结合上面的程序,倘若不将析构函数设置成虚函数,是否有缺陷?若有,请指出其缺陷。答:在上面的程序中,不将析构函数设置成虚函数是有缺陷的。它可能造成内存的泄漏,例如上面的程序中,存放Tom的堆空间未释放。
第7页(共12页)四.阅读及改编程序(共30分)1.(10分)有如下类CAT的说明四.阅读及改编程序(共30分)1.(10分)有如下类CAT的说明classCAT{public: CAT(intage=0){ itsAge=newint; *itsAge=age;}CAT(CAT&c){ itsAge=newint; *itsAge=*(c.itsAge);}~CAT(){ deleteitsAge; itsAge=NULL;}intGetAge(){return*itsAge;}voidSetAge(intage){*itsAge=age;}protected: int*itsAge;};将其中的数据成员改成整型变量intitsAge;请重新编写这个类,要求保持类的外部接口不变(即成员函数的原型不变、功能不变,函数体语句需要修改。若系统提供的某种默认函数能有相同功效,可以不另外定义而使用系统默认的函数)。classCAT{public: CAT(intage=0) { itsAge=age; } intGetAge(){returnitsAge;} voidSetAGe(intage){itsAge=age;}protected: intitsAge;};得分第8页(共12页)2.(20分)有如下类Tdate的说明及程序2.(20分)有如下类Tdate的说明及程序#include<iostream.h>#include<iomanip.h>classTdate{public: Tdate(intm=12,intd=25,inty=2004); intIsLeapYear(); voidPrint(); voidNextDay(); friendostream&operator<<(ostream&oo,Tdate&date); friendTdate&operator++(Tdate&date); friendTdateoperator++(Tdate&date,int);private: intmonth,day,year;};Tdate::Tdate(intm,intd,inty){ month=m;day=d;year=y;}intTdate::IsLeapYear(){ return(year%4==0&&year%100!=0||year%400==0);}voidTdate::Print(){ cout<<setfill('0')<<setw(2)<<month<<"/"<<setw(2)<<day<<"/"<<year<<endl; cout<<setfill('');}voidTdate::NextDay(){ intdays[12]={31,28,31,30,31,30,31,31,30,31,30,31}; days[1]+=IsLeapYear(); day++; if(day>days[month-1]) { day=1; month++; } if(month>12) { month=1; year++; }}第9页(共12页)ostream&ostream&operator<<(ostream&oo,Tdate&date){ oo<<setfill('0')<<setw(2)<<date.month<<"/" <<setw(2)<<date.day<<"/"<<date.year; oo<<setfill(''); returnoo;}Tdate&operator++(Tdate&date){ date.NextDay(); returndate;}Tdateoperator++(Tdate&date,int){ Tdatetemp(date); date.NextDay(); returntemp;}template<classT>voidfn(Ta,intn){ for(inti=0;i<n;i++) cout<<a++<<endl;}voidmain(){ Tdatea; fn(a,10);}(A)(4分)写出程序的运行结果。12/25/200412/26/200412/27/200412/28/200412/29/200412/30/200412/31/200401/01/200501/02/200501/03/2005第10页(共12页)(B)(16分)将类Tdate中的数据成员改成int*year,*month,*day;请重新编写这个类,要求保持类的外部接口不变(成员函数的原型不变、功能不变,函数体语句需要修改)。即在类之后完成尚未完成的5个成员函数的定义以及3个运算符重载。(B)(16分)将类Tdate中的数据成员改成int*year,*month,*day;请重新编写这个类,要求保持类的外部接口不变(成员函数的原型不变、功能不变,函数体语句需要修改)。即在类之后完成尚未完成的5个成员函数的定义以及3个运算符重载。classTdate{public: Tdate(intm=12,intd=25,inty=2004); Tdate(Tdate&date); ~Tdate(); intIsLeapYear(){return(*year%4==0&&*year%100!=0||*year%400==0); }voidPrint(); voidNextDay(); friendostream&operator<<(ostream&oo,Tdate&date); friendTdate&operator++(Tdate&date); friendTdateoperator++(Tdate&date,int);private: int*month,*day,*year;};Tdate::Tdate(intm,intd,inty){ year =newint; month =newint; day =newint; *year=y;*month=m;*day=d;}Tdate::Tdate(Tdate&date){ year =newint; month =newint; day =newint; *year =*date.year;*month =*date.month;*day =*date.day;}Tdate::~Tdate(){ deleteyear; deletemonth; deleteday;}第11页(共12页)voidvoidTdate::Print(){ cout <<setfill(’0’)<<setw(2)<<*month<<”/” <<setw(2)<<*day<<”/”<<*year<<endl; cout <<setfill(’’);}voidTdate::NextDay(){ intdays[12]={31,28,31,30,31,30,31,31,30,31,30,31}; days[1]+=IsLeapYear(); (*day)++; if(*day>days[*month-1]) { *day=1; (*month)++; } if(*month>12) { *month=1; (*year)++; }}ostream&operator<<(ostream&oo,Tdate&date){ oo<<setfill('0')<<setw(2)<<*date.month<<"/" <<setw(2)<<*date.day<<"/"<<*date.year; oo<<setfill(''); returnoo;}Tdate&operator++(Tdate&date){ date.NextDay(); returndate;}Tdateoperator++(T
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 航空公司空管人员招录面接全解析
- 建筑设计师招聘与面试全流程解析
- 电竞公司电竞经理职位招聘指南
- 市场营销部经理财务知识解答
- 兵装集团技术员培训效果评估报告
- 电子商务物流管理岗位面试全攻略
- 企业高效率人力资源管理之核心策略研究
- 幼儿园亲子体育活动方案
- 旅游行业IT系统建设与优化策略
- 招商银行柜员岗位面试宝典
- 化工工艺流程图绘制课件
- 《老年健康照护与促进》课件-第一模块老年健康促进与照护
- 骨筋膜室综合征的护理查房
- 车载HUD研究预测报告-中国车载HUD行业深度调研及投资机会分析预测报告(2024-2028年)
- 每天学点面诊手诊秘诀:一分钟揽镜自测人体异状一看便知
- 血液科护理中的危急重症监测与救治
- 大学生劳动教育教程(高职)全套教学课件
- 基尔霍夫定律课件
- 铁道货车运用维修-站修作业场
- 天津市水务局所属事业单位2023年招聘工作人员笔试参考题库(共500题)答案详解版
- 电子商务文案策划与写作
评论
0/150
提交评论