免费预览已结束,剩余16页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机科学与技术学院天津理工大学计算机科学与技术学院实验报告 至 学年 第 学期课程名称C+程序设计学号学生姓名年级专业教学班号实验地点实验时间 年 月 日 第 节 至 第 节主讲教师辅导教师实验( 三 )实验名称派生与继承软件环境C+visual硬件环境无实验目的(1) 理解继承的含义,掌握派生类的定义方法和实现;(2) 理解公有继承下基类成员对派生类成员和派生类对象的可见性,能正确地访问继承层次中的各种类成员;(3) 理解保护成员在继承中的作用,能够在适当的时候选择使用保护成员以便派生类成员可以访问基类的部分非公开的成员;实验内容(应包括实验题目、实验要求、实验任务等)1.#include iostream.h#define PI 3.14159class Point / 定义“点”类int x, y;public:Point(int a=0, int b=0)x=a; y=b;void ShowPoint( )coutPoint:(x,y)n;int Getx( ) return x; int Gety( )return y;void Setxy(int a, int b)x=a; y=b;class Circle: public Point / 定义“圆”类,公有继承int r; / “圆”的半径 public:Circle(int x, int y, int ra) : Point(x, y) / B r = ra; void Setr(int ra)r = ra; double Area( ) /求圆的面积return PI*r*r;void Move(int x_offset, int y_offset) /将圆心坐标平移int x1=Getx( ); /存取基类的私有成员int y1=Gety( ); / Dx1 += x_offset; y1 += y_offset;Setxy(x1, y1); / Evoid ShowCircle( )ShowPoint( ); / Fcout Radius: rt;coutArea: Area( )endl; /G;void main( )Circle c(1, 1, 1);c.ShowCircle( );c.Move(1, 2);c.ShowCircle( );c.Setxy(4, 5); /重新置圆心坐标 c.Setr(2); /重新置半径值 c.ShowCircle( );实验过程与实验结果(可包括实验实施的步骤、算法描述、流程、结论等)(1) 记录程序的运行结果Point(1, 1)Radius: 1Area: 3.14159Point(2, 3)Radius: 1Area: 3.14159Point(4, 5)Radius: 2Area: 12.5664(2) 测试能否将move函数体改写为x=x+x_offset;y=y+y_offset;不可以,因为x和y是Point类的私有(private)成员。2.#include iostream.h#define PI 3.14159class Point protected: /A int x, y;public:Point(int a=0, int b=0) x=a; y=b; void ShowPoint( ) coutPoint:(x,y)n; int Getx( ) return x; int Gety( ) return y; void Setxy(int a, int b) x=a; y=b; ;class Radius protected: int r;public:Radius(int ra=0) r = ra; void Setr(int ra) r = ra; int Getr( ) return r; ;class Circle : public Point, public Radius public:Circle(int x, int y, int ra) : Point(x, y), Radius(ra) /D double Area( ) return PI*r*r; /直接访问基类的保护成员 void Move(int x_offset, int y_offset) x += x_offset; y += y_offset; void ShowCircle( ) ShowPoint( );coutRadius: rt;coutArea: Area( )endl;void main( )Circle c(1, 1, 1);c.ShowCircle( );c.Move(1, 2);c.ShowCircle( );c.Setxy(4, 5);c.Setr(2);c.ShowCircle( );(1) 记录程序的运行结果Point:(1,1)Radius: 1 Area: 3.14159Point:(2,3)Radius: 1 Area: 3.14159Point:(4,5)Radius: 2 Area: 12.5664(2) 为什么可以直接使用x,y,x和y是Point类的保护(protected)成员(3) 如果x,y在基类中是私有的行吗?不行#include iostream.hclass Base1protected: int data1;public:Base1(int a=0)data1 = a; coutBase Constructor1n;Base1( )coutBase Destructor1n; ;class Base2protected: int data2;public:Base2(int a=0)data2 = a; coutBase Constructor2n;Base2( )coutBase Destructor2n; ;class Derived: public Base1, public Base2 int d;public:Derived(int x, int y, int z):Base1(x), Base2(y) d=z; coutDerived Constructorn;Derived( ) coutDerived Destructorn; void Show( ) coutdata1,data2,dendl; ;void main( ) Derived c(1, 2, 3);c.Show( );(1) 记录程序的运行结果Base Constructor1Base Constructor2Derived Constructor1,2,3Derived DestructorBase Destructor2Base Destructor1#include iostream.hclass Base1protected: int data1; public:Base1(int a=8)data1 = a; coutdata1, Base Constructor1n;Base1( )coutdata1, Base Destructor1n;class Base2protected: int data2;public:Base2(int a=9)data2 = a; coutdata2, Base Constructor2n;Base2( )coutdata2, Base Destructor2n;class Derived:public Base1, public Base2 int d;Base1 b1, b2; public:Derived(int x, int y, int z) : Base1(x), Base2(y), b1(x+y), b2(x+z) d=z; coutDerived Constructorn;Derived( ) coutDerived Destructorn;void Show( )coutdata1,data2,dendl;void main( )Derived c(1, 2, 3);c.Show( );(1) 记录程序的运行结果1, Base Constructor12, Base Constructor23, Base Constructor14, Base Constructor1Derived Constructor1,2,3Derived Destructor4, Base Destructor13, Base Destructor12, Base Destructor21, Base Destructor15.#includeiostream#includestringusing namespace std;class baseprotected: float price; /单价 string place; /产地 int count; /库存量 public: base(float p,int c,string pl) price=p; count=c; place=pl; void in_something(int add_cnt) count+=add_cnt; void out_something(int del_cnt) if(del_cntcount)count=0; /变0保护 小于0的按0计算 else count-=del_cnt; double total_price() return price*count; int r_count() return count; ;class shirt:public baseprotected: string material;public: shirt(float p ,int c ,string pl ,string m):base( p , c, pl) material=m; void print() coutn衬衣t产地:placet材料:material n库存量:countt单价:pricet总价格total_price()endl; ;class wardrobe:public baseprotected: string wood; string color;public: wardrobe(float p ,int c ,string pl ,string w ,string co ):base(p,c,pl) wood=w; color=co; void print() coutn立柜t产地:placet颜色:colort木料:woodn库存量: countt单价:pricet总价格total_price()endl; ;class cap:public shirtprotected: string style;public: cap(float p ,int c ,string pl ,string m,string st ):shirt(p,c,pl,m) style=st; void print() coutn帽子t产地:placet材料:material 样式:stylen库存量:countt单价: pricet总价格total_price()endl; ;int choose(string a) /用于判断下一步执行的命令 0.结束1.衬衣2.帽子3.立柜4.查询5.入库6.出库7.出错重输 if(a=0)return 0; /结束 else if(a=衬衣|a=shirt)return 1; else if(a=帽子|a=cap)return 2; else if(a=立柜|a=wardrobe)return 3; else if(a=查询|a=?|a=about)return 4; else if(a=入库|a=+|a=in)return 5; else if(a=出库|a=-|a=out)return 6; else if(a=帮助|a=?|a=help)return 8; else return 7;int total_count(cap a,shirt b,wardrobe c) return a.r_count()+b.r_count()+c.r_count(); /Powered by X.Duke int main(void)/=输入部分 int cho=1,i; /cho为选择计数器 接收choose函数的返回值 通过if语句判断要执行的语句 int ci=0,wi=0,si=0; /标记 角标 float pci5=0.00,pwi5=0.00,psi5=0.00; /单价 int cou_cap5=0,0,0,0,0,cou_shi5=0,0,0,0,0,cou_war5=0,0,0,0,0; /依次记录帽子 衬衣 立柜的库存量 string pla_cap5=0,0,0,0,0; /保存帽子产地信息 string pla_war5=0,0,0,0,0; /保存立柜产地信息 string pla_shi5=0,0,0,0,0; /保存衬衣产地信息 string col5=0,0,0,0,0; /保存颜色信息 string s_mat5=0,0,0,0,0; /保存衬衣_布料信息 string c_mat5=0,0,0,0,0; /保存帽子_布料信息 string woo5=0,0,0,0,0; /保存木料信息 string sty5=0,0,0,0,0; /保存样式信息 string temp,temp1=0,temp2=0,temp3=0; /临时寄存字符 int cou_temp;float p_temp; /临时记录初始值 int loop_sw=0; /事件标记点 为0时不跳过 非0时跳过 /提示性语句 cout现在对3种商品 n衬衣(shirt),帽子(cap),立柜(wardrobe) n实现基本管理功能endln=首先进行初始化工作=endl; cout即将录入商品名称(也可以是括号中的英文)输入0结束endl; while(cho!=0) /分类输入 cout输入商品名称; cintemp; cho=choose(temp); if(cho=1) /shirt -place material if(si=5)cout超过最大数量输入限制,跳出;continue; /溢出保护 cout设置衬衣的单价:;cinp_temp; /设置帽子单价 cout输入产地 布料 初始数量 并以空格隔开endl;cintemp1temp2cou_temp; for(i=0;i=si;i+) /用于判断是否与之前输入的有冲突 if(temp1=pla_shiitemp2=s_mati) if(p_temp!=psisi)cout价格冲突,输入最终价格:;cinpsisi; cout与之前输入的商品重复,将数量叠加endl;cou_shii+=cou_temp; loop_sw=1; /由于重复 事件开关打开 跳过赋值工作 if(loop_sw=0) psisi=p_temp; pla_shisi=temp1; s_matsi=temp2; cou_shisi+=cou_temp; /赋值工作 cou_temp=0; /扫尾清零工作 loop_sw=0; /同上 if(cho=2) /cap -place material style if(ci=5)cout超过最大数量输入限制,跳出;continue; cout设置帽子单价:;cinp_temp; / cout输入产地 布料 样式 初始数量 并以空格隔开endl;cintemp1temp2temp3cou_temp; for(i=0;i=ci;i+) if(temp1=pla_capitemp2=c_matitemp3=styi) if(p_temp!=pcici)cout价格冲突,输入最终价格:;cinpcici; cout与之前输入的商品重复,将数量叠加endl;cou_capi+=cou_temp; loop_sw=1; if(loop_sw=0) pcici=p_temp; pla_capci=temp1; c_matci=temp2; styci=temp3; cou_capci+=cou_temp; cou_temp=0; loop_sw=0; if(cho=3) /wardrobe -place wood color if(wi=5)cout超过最大数量输入限制,跳出;continue; cout设置立柜单价:;cinp_temp; cout输入产地 木料 颜色 初始数量 并以空格隔开endl;cintemp1temp2temp3cou_temp; for(i=0;i=wi;i+) if(temp1=pla_waritemp2=wooitemp3=coli) if(p_temp!=pwiwi)cout价格冲突,输入最终价格:;cinpwiwi; cout与之前输入的商品重复,将数量叠加endl;cou_wari+=cou_temp; loop_sw=1; if(loop_sw=0) pwiwi=p_temp; pla_warwi=temp1; woowi=temp2; colwi=temp3; cou_warwi+=cou_temp; cou_temp=0; loop_sw=0; if(cho=7)cout输入有误 重新; cho=1; /选择计数器重新设置 /开始初始化工作 shirt s_5= shirt(psi0,cou_shi0,pla_shi0,s_mat0), shirt(psi1,cou_shi1,pla_shi1,s_mat1), shirt(psi2,cou_shi2,pla_shi2,s_mat2), shirt(psi3,cou_shi3,pla_shi3,s_mat3), shirt(psi4,cou_shi4,pla_shi4,s_mat4) ; cap c_5= cap(pci0,cou_cap0,pla_cap0,c_mat0,sty0), cap(pci1,cou_cap1,pla_cap1,c_mat1,sty1), cap(pci2,cou_cap2,pla_cap2,c_mat2,sty2), cap(pci3,cou_cap3,pla_cap3,c_mat3,sty3), cap(pci4,cou_cap4,pla_cap4,c_mat4,sty4) ; wardrobe w_5= wardrobe(pwi0,cou_war0,pla_war0,woo0,col0), wardrobe(pwi1,cou_war1,pla_war1,woo1,col1), wardrobe(pwi2,cou_war2,pla_war2,woo2,col2), wardrobe(pwi3,cou_war3,pla_war3,woo3,col3), wardrobe(pwi4,cou_war4,pla_war4,woo4,col4) ;/输入部分结束/=功能部分 int total=0,totalcap=0,totalshi=0,totalwar=0; /用于累计库存总数 float ptotal=0.00,stotal=0.00,ctotal=0.00,wtotal=0.00; /用于累计总价值 int j=0; cout初始化结束 启用基本功能endln输入查询或about 查询当前库存情况endl; cout输入+或in或 入库 实现入库功能endl; cout输入-或out或 出库 实现出库功能endl;while(cho!=0) if(loop_sw=0)cout请输入相应功能:;cintemp; cho=choose(temp); if(cho=7)cout输入有误 重新; if(cho=4) /查询功能 for(i=0;isi;i+)s_i.print(); for(i=0;ici;i+)c_i.print(); for(i=0;iwi;i+)w_i.print(); for(i=0;i5;i+)total+=total_count(c_i,s_i,w_i); ptotal+=(s_i.total_price()+c_i.total_price()+w_i.total_price(); stotal+=s_i.total_price(); ctotal+=c_i.total_price(); wtotal+=w_i.total_price(); totalcap+=c_i.r_count(); totalshi+=s_i.r_count(); totalwar+=w_i.r_count(); coutn衬衣总库存:totalshit价值:stotaln帽子总库存:totalcapt价值:ctotaln立柜总库存:totalwart价值:wtotaln所有商品库存总量:totalt总价值:ptotalendl; if(loop_sw=1)break; if(cho=5) /入库 while(cho!=0) cout输入要入库的商品种类(输入0结束):;cintemp; cho=choose(temp); if(cho)couttemp中有以下小类 输入编号进行入库操作; if(cho=1) for(i=0;isi;i+) coutn编号 it产地 pla_shii t布料:s_matit现有 s_i.r_count(); coutn输入商品编号:;cinj; if(si=0)cout无商品endl; else while(j0|j=si)cout有误 重新输入:;cinj; cout入库数量:;cincou_temp;s_j.in_something(cou_temp); if(cho=2) for(i=0;ici;i+) coutn编号 it产地 pla_capit布料:c_mati 样式:styit现有 c_i.r_count(); if(ci=0)cout无商品endl; else coutn输入商品编号:;cinj; while(j0|j=ci)cout有误 重新输入:;cinj; cout入库数量:;cinco
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农村地契过户协议书
- 校园花木护理协议书
- 个人安全承诺协议书
- 机器制作技术协议书
- 占用林地回收协议书
- 山东烟台市福山区事业单位2025年下半年招考工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 养蜂合作社合同范本
- 宁波市江北区2025招考事业编制工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 格力工程机合同范本
- 个体投资合伙协议书
- 2025年高压电工证复审理论考试模拟题库练习题及解析答案
- 服装厂安全生产责任制
- 【英语】高三英语试卷分类汇编英语阅读理解(及答案)含解析
- 安徽省名校2025-2026学年高二上学期期中联考语文试题(含答案)
- 安全上下楼梯课件
- 海洋守护:捕捞业新篇章-推动可持续发展建设绿色渔业
- 后勤人员消防安全课件
- 2025年泰安市公开招聘劳务派遣制工会社会工作者(52人)笔试考试参考题库及答案解析
- 2025中国煤炭科工集团有限公司二级企业8岗位招聘9人笔试历年参考题库附带答案详解
- 现代特色历史街区教案
- 生态环保模块化湿地建设方案
评论
0/150
提交评论