




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
西安交大C++程序设计第九章作业西安交大C++程序设计第九章作业西安交大C++程序设计第九章作业xxx公司西安交大C++程序设计第九章作业文件编号:文件日期:修订次数:第1.0次更改批准审核制定方案设计,管理制度西安交通大学实验报告课程__计算机程序设计__实验名称__继承__第1页共页系别__________实验日期2014年5月日专业班级_____组别_____________实验报告日期2014年月日姓名_________学号__报告退发(订正、重做)同组人_________________________________教师审批签字一、实验目的熟练继承的用法,进一步训练类的编程,并练习不同继承方式下对基类的成员的访问的控制。二、实验内容(一)第一题:从类Person中派生出一个教师类,新增的属性有:专业、职称和主讲课程(一门),并为这些属性定义相应的方法。1.源程序代码:#include<iostream>usingnamespacestd;classPerson{protected: char*Name; charSex; intAge;public: Person() { Name="csj"; Sex='M'; Age=18; } Person(char*name,charsex,intage) { Register(name,sex,age); } ~Person() { delete[]Name; } voidRegister(char*name,charsex,intage) { intm=strlen(name); Name=newchar[m+1]; strcpy(Name,name); Sex=sex;; Age=age; } voidprint() { cout<<"姓名:"<<Name<<"\t性别:"<<Sex<<"\t年龄:"<<Age<<endl; }};classTeacher:publicPerson{protected: char*zhuanye; char*zhicheng; char*course;public: Teacher(); Teacher(char*,char,int,char*,char*,char*); voidRegister(char*,char,int,char*,char*,char*); ~Teacher(); voidprint(); };Teacher::Teacher(){ Person::Register("罗先觉",'M',61); strcpy(zhuanye,"电气工程及其自动化"); strcpy(zhicheng,"教授"); strcpy(course,"电路");}Teacher::Teacher(char*name,charsex,intage,char*zy,char*zc,char*cor){ Register(name,sex,age,zy,zc,cor);}voidTeacher::Register(char*name,charsex,intage,char*zy,char*zc,char*cor) { Person::Register(name,sex,age); zhuanye=newchar[strlen(zy)+1]; strcpy(zhuanye,zy); zhicheng=newchar[strlen(zc)+1]; strcpy(zhicheng,zc); course=newchar[strlen(cor)+1]; strcpy(course,cor); }Teacher::~Teacher(){ delete[]zhuanye; delete[]zhicheng; delete[]course;}voidTeacher::print(){ cout<<"姓名:"<<Name<<"\t性别:"<<Sex<<"\t年龄:"<<Age<<"\t专业"<<zhuanye<<"\t职称:"<<zhicheng<<"\t主讲课程:"<<course<<endl;}intmain(){ Personperson; ("csj",'M',18); (); Teacherteacher("lll",'M',56,"math","jiaoshou","gaoshu"); (); ("某某",'M',58,"数学","教授","高等数学"); (); return0;}2.实验结果:(二)第二题:第二题:许多研究生既有学生的属性,又有教师的属性。试通过多重继承说明一个研究生类。1.源程序代码:验结果:(三)第三题:修改例9-5,从Point类中派生出一个Line类。Line类增加一个数据成员EndPoint计算线的长度。试比较一下与直接使用Point类来构造Line类的不同之处。1.源程序代码:(用了三个文件)验结果:四、第四题:从Date类和Time类派生出一个DateAndTime类,修改相应的成员函数,当时间递增到新的一天时,能够修改日期值。1.程序源代码:#include<iostream>#include<cmath>usingnamespacestd;classDate{protected: intyear,month,day;public: Date(inta,intb,intc) { year=a; month=b; day=c; } voidinit(intyy,intmm,intdd); voidprint_ymd();};voidDate::init(intyy,intmm,intdd){ month=(mm>=1&&mm<=12)mm:0; year=(yy>=1900&&yy<=2100)yy:1900; day=(dd>=1&&dd<=31)dd:1;};voidDate::print_ymd(){ cout<<year<<"-"<<month<<"-"<<day;}classTime{ protected: inthour,minute,second;public: Time(inth,intm,ints) { hour=h,minute=m,second=s; } voidRegister(inth=0,intm=0,ints=0) { hour=h,minute=m,second=s; } voidShowme_hms() { cout<<""<<hour<<"小时"<<minute<<"分钟"<<second<<"秒"<<endl; }};classDateAndTime:publicDate,publicTime{public: DateAndTime(inta=1900,intb=1,intc=1,intd=0,inte=0,intf=0):Date(a,b,c),Time(d,e,f){} voidinput(intyy,intmm,intdd,inth,intm,ints) { hour=h,minute=m,second=s; month=mm; year=yy; day=dd; } voidNormal() { intn; if(second>=60) { n=second/60;second=second%60;minute=minute+n; } if(second<0) { n=second/60+1;second=second%60+60;minute=minute-n; } if(minute>=60) { n=minute/60;minute=minute%60;hour=hour+n; } if(minute<0) { n=minute/60+1;minute=minute%60+60;hour=hour-n; } if(hour>=24) { n=hour/24;hour=hour%24;day=day+n; } if(hour<0) { n=hour/24+1;hour=hour%24+24;day=day-n; } if(day>=30) { n=day/30;day=day%30;month=month+n; } if(day<0) { n=day/30+1;day=day%30+30;month=month-n; } if(month>=12) { n=month/12;month=month%12;year=year+n; } if(month<0) { n=month/12+1;month=month%12+12;year=year-n; }}voidadd(DateAndTime&d){ year=year+; month=month+; day=day+; hour=hour+; minute=minute+; second=second+;}voidsub(DateAndTime&d){ year=; month=; day=; hour=; minute=; second=;}voidshow(){ Normal(); print_ymd(); Showme_hms();}};voidmain(){ DateAndTimed1,d2; cout<<"初始化:\n"; (); (); (2014,5,23,22,4,50); (0,0,0,6,58,29); cout<<"第一个时间:\n"; (); cout<<"第二个时间:\n"; (); cout<<"第一个时间第二个时间相加为:\n"; (d2); ();}2.实验结果:五、第五题:采用继承方式定义一个三层生日蛋糕类,不论基类还是派生类都至少包含5个函数:构造函数、设置数据成员函数、求蛋糕体积、运算符>重载函数、输出生日祝词与蛋糕形状函数。并编写主函数测试各成员函数。继承方式如下:首先定义圆柱体形状蛋糕类,只有3个数据成员,半径、高、生日祝词。然后派生出圆柱体_方柱体蛋糕类,即在圆柱体形状上增加方柱体形状。假定方柱体的正方形面积小于圆柱体的圆形面积,注意方柱体的高与正方形的边长不一定相等。再用圆柱体_方柱体蛋糕类派生出圆柱体_方柱体_菱形体蛋糕类,即在方柱体形状上增加菱形柱体形状。假定菱形柱体的菱形面积小于方柱体的正方形面积。提示:①运算符>重载指两个蛋糕对象的体积大小。②基类和派生类数据成员不能定义为public。③设置数据成员函数、求蛋糕体积、求蛋糕表面积函数、输出生日祝词与蛋糕形状函数均为同名重载函数,例如分别采用函数名为init()、volume()、area()、output()。程序运行参考图如下:(红颜色的功能下一章实验完成)#include<iostream>#include<cstring>#include<cmath>usingnamespacestd;classyuan{protected: doubler,h1; charll[20];public: yuan(doublea,doubleb,char*str) {r=a; h1=b; strcpy(ll,str);} voidinit(doublea,doubleb,char*str) {r=a; h1=b; strcpy(ll,str);} doublevolume() {return*r*r*h1;} doublearea() {return2**r*(r+h1);} voidoutput() { cout<<"蛋糕祝词:"<<ll<<endl; cout<<"圆柱形蛋糕信息如下:"<<endl; cout<<"半径:"<<r<<"高:"<<h1<<"体积:"<<volume()<<"表面积:"<<area()<<endl; }};classfang:publicyuan{protected: doubleaa,h2;public: fang(doublea,doubleb,char*str,doublec,doubled):yuan(a,b,str) { aa=c; h2=d;} voidinit(doublea,doubleb,char*str,doublec,doubled) {yuan::init(a,b,ll); aa=c; h2=d;} doublevolume() {returnaa*aa*h2;} doublearea() {returnaa*aa*2+4*aa*h2;} voidoutput() { yuan::output(); cout<<"方柱形蛋糕信息如下:"<<endl; cout<<"边长:"<<aa<<"高:"<<h2<<endl; cout<<"体积:"<<volume()<<"表面积:"<<area()<<endl; }};classling:publicfang{protected: doublecz,dz,h3;public: ling(doublea,doubleb,char*str,doublec,doubled,doublee,doublef,doubleg):fang(a,b,str,c,d) { cz=e; dz=f; h3=g;} voidinit(doublea,doubleb,char*str,doublec,doubled,doublee,doublef,doubleg) {fang::init(a,b,str,c,d); cz=e; dz=f; h3=g;} doublevolume() {returncz*dz*h3*;} doublearea() {returncz*dz+4**sqrt(cz*cz+dz*dz)*h3;} voidoutput() { fang::output(); cout<<"菱柱形蛋糕信息如下:"<<endl; cout<<"菱形长轴:"<<cz<<"短轴:"<<dz<<"高:"<<h3<<endl; cout<<"体积:"<<volume()<<"表面积:"<<area()<<endl; cout<<"总体积为:"<<yuan::volume()+fang::volume()+volume()<<"总表面积:"<<yuan::area()+fang::area()+area()<<endl; }};voidmain(){ charzc[31]; doublea,b,c,d,e,f,g; lingcake(0,0,"",0,0,0,0,0); cout<<"请输入蛋糕的:祝词,半径高,方形边长高,菱形长轴短轴高\n"; (zc,30); cin>>a>>b>>c>>d>>e>>f>>g; (a,b,zc,c,d,e,f,g); ();}3.问题分析:六、第六题:(必做题)设计定义100位的十进制整数类,成员函数至少应有构造函数、加法函数、减法函数、输出大整数函数,并编写主函数加以测试。提示:(1)在类中定义三个数据成员,存放正整数成员intnum[100],存放正负符号成员charsign,存放整数实际长度成员intlen;(2)在构造函数中,先将整个数组中100个元素赋0。然后通过大整数的字符串给数组num[100]中每个数组元素赋值,即要转换赋值。例如大整数字符串为"-4587",num[99]=‘5’-‘0’+0;num[98]=‘6’-‘0’+0;.......,sign=‘-’;len=16。1.源程序代码:#include<iostream>#include<cstring>#include<cmath>#include<algorithm>usingnamespacestd;classczs{ intnum[100]; intlen; charsign;public: czs() { for(inti=0;i<100;i++) num[i]=0; len=0; sign=''; } voidset(char*str) { if(str[0]=='-') { str++; sign='-';} elseif(str[0]=='+') { str++; sign='';} len=strlen(str); for(inti=100-len;i<100;i++) num[i]=str[i+len-100]-'0'; } voidshow() { cout<<sign; for(inti=100-len;i<100;i++) cout<<num[i]; cout<<endl; } voidadd(czs&a) { if(sign== { intb=max(len,; for(inti=99;i>100-b;i--) { num[i]=num[i]+[i]; num[i-1]=num[i-1]+num[i]/10; num[i]=num[i]%10; } num[100-b]=num[100-b]+[100-b]; } else { if(len> for(inti=99;i>=len;i--) { num[i]=num[i][i]; if(num[i]<0) { num[i]=num[i]+10; num[i-1]--; } } elseif(len< { sign=; for(inti=99;i>=len;i--) { num[i]=[i]-num[i]; if(num[i]<0) { num[i]=num[i]+10; [i-1]--; } } } else { intb=0; for(inti=100-len;i<100;i++) if(num[i]!=[i]) { if(num[i]<[i]) b=1; break; } if(b) { sign=; for(inti=99;i>=len;i--) { num[i]=[i]-num[i]; if(num[i]<0) { num[i]=num[i]+10; [i-1]--; } } } else { for(inti=99;i>=len;i--) { num[i]=num[i][i]; if(num[i]<0) { num[i]=num[i]+10; num[i-1]--; }} } } } } voidminus(czsa) { if(sign!= { intb=max(len,; for(inti=99;i>100-b;i--) { num[i]=num[i]+[i]; num[i-1]=num[i-1]+num[i]/10; num[i]=num[i]%10; } num[100-b]=num[100-b]+[100-b]; } else { if(len> for(inti=99;i>=len;i--
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 毛纱毛条企业县域市场拓展与下沉战略研究报告
- 皮肤健康教育与老年人的生活改善
- 铁矿石原矿企业县域市场拓展与下沉战略研究报告
- 过氧化二乙基企业县域市场拓展与下沉战略研究报告
- 2025年02月贵州沿河土家族自治县事业单位公开招聘158人笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 单页地图企业数字化转型与智慧升级战略研究报告
- 全塑拖鞋企业数字化转型与智慧升级战略研究报告
- 商品分销合同范本
- 锡酸钠企业数字化转型与智慧升级战略研究报告
- 未印文字图画纸制标签企业数字化转型与智慧升级战略研究报告
- 2021译林版高中英语选择性必修三课文翻译
- 2022年华中科技大学博士研究生英语入学考试真题
- 《网店运营与管理》整本书电子教案全套教学教案
- 打印版 《固体物理教程》课后答案王矜奉
- CAD术语对照表
- 学术论文的写作与规范课件
- 香港牛津新魔法Newmagic3AUnit4Mycalendar单元检测试卷
- 中考《红星照耀中国》各篇章练习题及答案(1-12)
- Q∕GDW 11612.43-2018 低压电力线高速载波通信互联互通技术规范 第4-3部分:应用层通信协议
- 自动化物料编码规则
- 第1本书出体旅程journeys out of the body精教版2003版
评论
0/150
提交评论