




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
西安交通大学实验报告课程_计算机程序设计_实验名称_继承_第 1 页 共 页系 别_ _ 实 验 日 期 2014 年 5 月 日专业班级_ _组别_ 实 验 报 告 日 期 2014 年 月 日姓 名_ _学号_ _ 报 告 退 发 ( 订正 、 重做 )同 组 人_ 教 师 审 批 签 字 一、实验目的熟练继承的用法,进一步训练类的编程,并练习不同继承方式下对基类的成员的访问的控制。二、实验内容 (一)第一题:从类Person中派生出一个教师类,新增的属性有:专业、职称和主讲课程(一门),并为这些属性定义相应的方法。1.源程序代码: #includeusing namespace std;class Personprotected:char *Name;char Sex;int Age;public:Person()Name=csj;Sex=M;Age=18;Person(char *name,char sex,int age)Register(name,sex,age);Person()delete Name;void Register(char *name,char sex,int age)int m=strlen(name);Name=new charm+1;strcpy(Name,name);Sex=sex;Age=age;void print()cout姓名:Namet性别:Sext年龄:Ageendl;class Teacher:public Personprotected:char *zhuanye;char *zhicheng;char *course;public:Teacher();Teacher(char*,char,int,char*,char*,char*);void Register(char*,char,int,char*,char*,char*);Teacher();void print();Teacher:Teacher()Person:Register(罗先觉,M,61);strcpy(zhuanye,电气工程及其自动化);strcpy(zhicheng,教授);strcpy(course,电路);Teacher:Teacher(char *name,char sex,int age,char *zy,char *zc,char *cor)Register(name,sex,age,zy,zc,cor);void Teacher:Register(char *name,char sex,int age,char *zy,char *zc,char *cor)Person:Register(name,sex,age);zhuanye=new charstrlen(zy)+1;strcpy(zhuanye,zy);zhicheng=new charstrlen(zc)+1;strcpy(zhicheng,zc);course=new charstrlen(cor)+1;strcpy(course,cor);Teacher:Teacher()delete zhuanye;delete zhicheng;delete course;void Teacher:print()cout姓名:Namet性别:Sext年龄:Aget专业zhuanyet职称:zhichengt主讲课程:courseendl;int main()Person person;person.Register(csj,M,18);person.print();Teacher teacher(lll,M,56,math,jiaoshou,gaoshu);teacher.print();teacher.Register(某某,M,58,数学,教授,高等数学);teacher.print();return 0;2.实验结果:(二)第二题:第二题:许多研究生既有学生的属性,又有教师的属性。试通过多重继承说明一个研究生类。1.源程序代码:/许多研究生既有学生的属性,又有教师的属性。试通过多重继承说明一个研究生类。#includeusing namespace std;class Personprotected:char Name10;/姓名intAge;/年龄char Sex;/性别public:Person()strcpy(Name,人某某);Age=34;Sex=m;Person(char *name,int age,char sex)Registerper(name,age,sex);void Registerper(char *name,int age,char sex) /设置数据成员strcpy(Name,name);Age = age;Sex=(sex=m? m:f);void printper()/输出数据成员cout姓名:Namet年龄:Aget性别:Sex; ;class Student:public Personprotected:char Classname20;char Number20;char Zhuanye20;public:Student()Registerper(学生某某,18,f);strcpy(Classname,钱学森);strcpy(Number,);strcpy(Zhuanye,电气);Student(char *name,int age,char sex,char *classname,char *number,char *zhuanye)Registerstu(name,age,sex,classname,number,zhuanye);void Registerstu(char *name,int age,char sex,char *classname,char *number,char *zhuanye)Registerper(name,age,sex);strcpy(Classname,classname);strcpy(Number,number);strcpy(Zhuanye,zhuanye);void printstu()printper();coutt班级:Classnamet学号:Numbert专业:Zhuanye;class Teacher:public Personprotected:char Zhicheng20;char Keti20;char Kecheng20;public:Teacher()Registerper(老师某某,45,m);strcpy(Zhicheng,教授);strcpy(Keti,新型计算机开发);strcpy(Kecheng,计算机基础);Teacher(char *name,int age,char sex,char *zhicheng,char *keti,char *kecheng)Registertea(name,age,sex,zhicheng,keti,kecheng);void Registertea(char *name,int age,char sex,char *zhicheng,char *keti,char *kecheng)Registerper(name,age,sex);strcpy(Zhicheng,zhicheng);strcpy(Keti,keti);strcpy(Kecheng,kecheng);void printtea()printper();coutt职称:Zhichengt课题:Ketit课程:Kecheng;class Graduate:public Student,public Teacherpublic:Graduate()Registerstu(研究生某某 ,23 ,f ,电气某班,电气);strcpy(Keti,电力系统研究);strcpy(Kecheng,电路);Graduate(char *name,int age,char sex,char *classname,char *number,char *zhuanye,char *keti,char *kecheng)Registergra(name,age,sex,classname,number,zhuanye,keti,kecheng);void Registergra(char *name,int age,char sex,char *classname,char *number,char *zhuanye,char *keti,char *kecheng)Registerstu(name,age,sex,classname,number,zhuanye);strcpy(Keti,keti);strcpy(Zhuanye,zhuanye);void printgra()printstu();coutt课题:Ketit课程:Kecheng;int main()Person person;cout显示结果:t;person.printper();person.Registerper(王某某,34,m);coutn初始化后显示结果:n;person.printper();Student student;coutn显示结果:t;student.printstu();student.Registerstu(张某某,18,m,qianxuesheng66,dianqigongcheng);coutn初始化后显示结果:n;student.printstu();Teacher teacher;coutn显示结果:t;teacher.printtea();teacher.Registertea(刘某某,56,m,教授,陶艺历史研究,中国传统文化);coutn初始化后显示结果:n;teacher.printtea();Graduate graduate;coutn显示结果:n;graduate.printgra();graduate.Registergra(勒某某,23,f,21班,电气,高压输电系统,信号与系统);coutn初始化后显示结果:n;graduate.printgra();coutendl;return 0; 2.实验结果:(三)第三题:修改例9-5,从Point类中派生出一个Line类。Line类增加一个数据成员EndPoint计算线的长度。试比较一下与直接使用Point类来构造Line类的不同之处。1.源程序代码:(用了三个文件) /Point.h文件Point类#ifndef POINT_H#define POINT_Husing namespace std;class Point/Point类中定义内容:x,y为坐标;setpoint为录入坐标函数;/GetX,GetY是为了将x,y这两个私有成员能够用于line类而定义的,print为输出函数。int x,y;public:Point()x=0;y=0;Point(int a,int b)SetPoint(a,b);void SetPoint(int a,int b)x=a;y=b;void Print()coutx,y;int GetX()return x;int GetY()return y;#endif/line.h文件line类#ifndef CIRCLE_H#define CIRCLE_H#include#includeusing namespace std;#includepoint.hclass Line:public Pointdouble length;public:Point point1,point2;Line()point1.SetPoint(0,0);point2.SetPoint(0,0);Line(int a,int b,int c,int d)SetLine(a,b,c,d);void SetLine(int a,int b,int c,int d)point1.SetPoint(a,b);point2.SetPoint(c,d);void EndPoint()int x1=point1.GetX(),y1=point1.GetY(),x2=point2.GetX(),y2=point2.GetY();length=sqrt(x1-x2)*(x1-x2)*1.0+(y1-y2)*(y1-y2)*1.0);void Print()coutlength;#endif/main文件执行测试#include#includepoint.h#includeline.husing namespace std;int main()Point p(30,50);Line l(12,34,56,78);coutPoint p:;p.Print();coutnThe location of Line l:;couttPoint 1:;l.point1.Print();couttPoint 2:;l.point2.Print();coutnThe length of line l:;l.EndPoint();l.Print();coutendl;return 0;2.实验结果: 四、第四题:从Date类和Time类派生出一个DateAndTime类,修改相应的成员函数,当时间递增到新的一天时,能够修改日期值。 1.程序源代码:#include#includeusing namespace std;class Dateprotected:int year,month,day;public:Date(int a,int b,int c)year=a;month=b;day=c;void init(int yy,int mm,int dd);void print_ymd();void Date:init(int yy,int mm,int dd)month=(mm=1&mm=1900&yy=1&dd=31) ? dd:1;void Date:print_ymd()coutyear-month-day;class Time protected:int hour,minute,second;public:Time(int h,int m,int s) hour=h,minute=m,second=s;void Register(int h=0,int m=0,int s=0)hour=h,minute=m,second=s;void Showme_hms()cout hour小时minute分钟second秒=60) n=second/60;second=second%60;minute=minute+n; if(second=60) n=minute/60;minute=minute%60;hour=hour+n; if(minute=24)n=hour/24;hour=hour%24;day=day+n;if(hour=30)n=day/30;day=day%30;month=month+n;if(day=12)n=month/12;month=month%12;year=year+n;if(month0)n=month/12+1;month=month%12+12;year=year-n;void add(DateAndTime &d) year=year+d.year;month=month+d.month;day=day+d.day;hour=hour+d.hour;minute=minute+d.minute;second=second+d.second;void sub(DateAndTime&d) year=year-d.year;month=month-d.month;day=day-d.day;hour=hour-d.hour;minute=minute-d.minute;second=second-d.second;void show()Normal();print_ymd();Showme_hms();void main()DateAndTime d1,d2;cout初始化:n;d1.show();d2.show();d1.input(2014,5,23,22,4,50);d2.input(0,0,0,6,58,29);cout第一个时间:n;d1.show();cout第二个时间:n;d2.show();cout 重载函数、输出生日祝词与蛋糕形状函数。并编写主函数测试各成员函数。继承方式如下:首先定义圆柱体形状蛋糕类,只有 3 个数据成员,半径、高、生日祝词。然后派生出圆柱体 _ 方柱体蛋糕类,即在圆柱体形状上增加方柱体形状。假定方柱体的正方形面积小于圆柱体的圆形面积,注意方柱体的高与正方形的边长不一定相等。再用圆柱体 _ 方柱体蛋糕类派生出圆柱体 _ 方柱体 _ 菱形体蛋糕类,即在方柱体形状上增加菱形柱体形状。假定菱形柱体的菱形面积小于方柱体的正方形面积。提示: 运算符 重载指两个蛋糕对象的体积大小。 基类和派生类数据成员不能定义为 public 。 设置数据成员函数、求蛋糕体积、求蛋糕表面积函数、输出生日祝词与蛋糕形状函数均为同名重载函数,例如分别采用函数名为 init() 、 volume() 、 area() 、 output() 。程序运行参考图如下:(红颜色的功能下一章实验完成)#include#include#includeusing namespace std;class yuanprotected:double r,h1;char ll20;public:yuan(double a,double b,char *str)r=a;h1=b;strcpy(ll,str);void init(double a,double b,char *str)r=a;h1=b;strcpy(ll,str);double volume()return 3.14*r*r*h1;double area()return 2*3.14*r*(r+h1);void output()cout蛋糕祝词:llendl;cout圆柱形蛋糕信息如下:endl;cout半径:r 高:h1 体积:volume() 表面积:area()endl;class fang:public yuanprotected:double aa,h2;public:fang(double a,double b,char *str,double c,double d):yuan(a,b,str)aa=c;h2=d;void init(double a,double b,char *str,double c,double d)yuan:init(a,b,ll);aa=c;h2=d;double volume()return aa*aa*h2;double area()return aa*aa*2+4*aa*h2;void output()yuan:output();cout方柱形蛋糕信息如下:endl;cout边长:aa 高:h2endl;cout体积:volume() 表面积:area()endl;class ling:public fangprotected:double cz,dz,h3;public:ling(double a,double b,char *str,double c,double d,double e,double f,double g):fang(a,b,str,c,d)cz=e;dz=f;h3=g;void init(double a,double b,char *str,double c,double d,double e,double f,double g)fang:init(a,b,str,c,d);cz=e;dz=f;h3=g;double volume()return cz*dz*h3*0.5;double area()return cz*dz+4*0.5*sqrt(cz*cz+dz*dz)*h3;void output()fang:output();cout菱柱形蛋糕信息如下:endl;cout菱形长轴:cz 短轴:dz 高:h3endl;cout体积:volume() 表面积:area()endl;cout总体积为:yuan:volume()+fang:volume()+volume() 总表面积:yuan:area()+fang:area()+area()endl;void main()char zc31;double a,b,c,d,e,f,g;ling cake(0,0, ,0,0,0,0,0);coutabcdefg;cake.init(a,b,zc,c,d,e,f,g);cake.output();3.问题分析:六、第六题:(必做题)设计定义100位的十进制整数类,成员函数至少应有构造函数、加法函数、减法函数、输出大整数函数,并编写主函数加以测试。提示:(1)在类中定义三个数据成员,存放正整数成员intnum100,存放正负符号成员char sign,存放整数实际长度成员int len;(2)在构造函数中,先将整个数组中100个元素赋0。然后通过大整数的字符串给数组num100中每个数组元素赋值,即要转换赋值。例如大整数字符串为-98765,num99=5-0+0;num98=6-0+0;.,sign=-;len=16。1.源程序代码:#include#include#include #include using namespace std;class czsint num100;int len;char sign;public:czs()for(int i=0;i100;i+)numi=0;len=0;sign= ;void set(char *str)if(str0=-)str+;sign=-;else if(str0=+)str+;sign= ;len=strlen(str);for(int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年云南交通职业技术学院单招职业倾向性考试必刷测试卷完美版
- 2026年华北理工大学轻工学院单招综合素质考试必刷测试卷必考题
- 临朐初三考试试题及答案
- 离婚协议书高文平
- 推广意向协议书
- 健身 入会协议书
- 江苏省考就业协议书
- 昆山校医考试试题及答案
- 塑料母粒生产线项目规划设计方案
- 中职会计笔试题及答案
- 注射泵操作使用课件
- 高考语文考前必练之名句名篇默写第09练《烛之武退秦师》(原卷版+解析)
- 《企业安全生产费用提取和使用管理办法》财资2022136号(2022.11.21)
- 医学伦理与职业操守
- 华为体验店开业方案
- 《风力发电技术概论》课件
- 城市设计实践类型 城市设计实践教程电子书
- 电气设备空载试运行及负荷试运行记录
- 全等三角形-倍长中线法
- GB/T 9162-2001关节轴承推力关节轴承
- 建筑机电安装工程标准化施工做法图集课件
评论
0/150
提交评论