《天津理工大学C实验三.doc》由会员分享,可在线阅读,更多相关《天津理工大学C实验三.doc(19页珍藏版)》请在课桌文档上搜索。
1、#理工大学计算机科学与技术学院实验报告至 学年 第 学期课程名称C+程序设计学号学生#年级专业教学班号实验地点实验时间 年 月 日 第 节 至 第 节主讲教师辅导教师实验 三 实验名称派生与继承软件环境C+visual硬件环境无实验目的(1) 理解继承的含义,掌握派生类的定义方法和实现;(2) 理解公有继承下基类成员对派生类成员和派生类对象的可见性,能正确地访问继承层次中的各种类成员;(3) 理解保护成员在继承中的作用,能够在适当的时候选择使用保护成员以便派生类成员可以访问基类的部分非公开的成员;实验内容应包括实验题目、实验要求、实验任务等1.#include #define PI 3.141
2、59class Point / 定义点类int x, y;public:Pointx=a; y=b;void ShowPointcoutPoint:x,yn;int Getx return x; int Getyreturn y;void Setxyx=a; y=b;class Circle: public Point / 定义圆类,公有继承int r; / 圆的半径 public:Circle : Point / B r = ra; void Setrr = ra; double Area /求圆的面积return PI*r*r;void Move /将圆心坐标平移int x1=Getx;
3、/存取基类的私有成员int y1=Gety; / Dx1 += x_offset; y1 += y_offset;Setxy; / Evoid ShowCircleShowPoint; / Fcout Radius: rt;coutArea: Areaendl; /G;void mainCircle c;c.ShowCircle;c.Move;c.ShowCircle;c.Setxy; /重新置圆心坐标 c.Setr; /重新置半径值 c.ShowCircle;实验过程与实验结果可包括实验实施的步骤、算法描述、流程、结论等(1) 记录程序的运行结果PointRadius: 1Area: 3.1
4、4159PointRadius: 1Area: 3.14159PointRadius: 2Area: 12.5664(2) 测试能否将move函数体改写为x=x+x_offset;y=y+y_offset;不可以,因为x和y是Point类的私有private成员.2.#include #define PI 3.14159class Point protected: /A int x, y;public:Point x=a; y=b; void ShowPoint coutPoint:x,yn; int Getx return x; int Gety return y; void Setxy x
5、=a; y=b; ;class Radius protected: int r;public:Radius r = ra; void Setr r = ra; int Getr return r; ;class Circle : public Point, public Radius public:Circle : Point, Radius /D double Area return PI*r*r; /直接访问基类的保护成员 void Move x += x_offset; y += y_offset; void ShowCircle ShowPoint;coutRadius: rt;cou
6、tArea: Areaendl;void mainCircle c;c.ShowCircle;c.Move;c.ShowCircle;c.Setxy;c.Setr;c.ShowCircle;(1) 记录程序的运行结果Point:Radius: 1 Area: 3.14159Point:Radius: 1 Area: 3.14159Point:Radius: 2 Area: 12.5664(2) 为什么可以直接使用x,y,x和y是Point类的保护protected成员(3) 如果x,y在基类中是私有的行吗?不行#include class Base1protected: int data1;p
7、ublic:Base1data1 = a; coutBase Constructor1n;Base1coutBase Destructor1n; ;class Base2protected: int data2;public:Base2data2 = a; coutBase Constructor2n;Base2coutBase Destructor2n; ;class Derived: public Base1, public Base2 int d;public:Derived:Base1, Base2 d=z; coutDerived Constructorn;Derived coutD
8、erived Destructorn; void Show coutdata1,data2,dendl; ;void main Derived c;c.Show;(1) 记录程序的运行结果Base Constructor1Base Constructor2Derived Constructor1,2,3Derived DestructorBase Destructor2Base Destructor1#include class Base1protected: int data1; public:Base1data1 = a; coutdata1, Base Constructor1n;Bas
9、e1coutdata1, Base Destructor1n;class Base2protected: int data2;public:Base2data2 = a; coutdata2, Base Constructor2n;Base2coutdata2, Base Destructor2n;class Derived:public Base1, public Base2 int d;Base1 b1, b2; public:Derived : Base1, Base2, b1, b2 d=z; coutDerived Constructorn;Derived coutDerived D
10、estructorn;void Showcoutdata1,data2,dendl;void mainDerived c;c.Show;(1) 记录程序的运行结果1, Base Constructor12, Base Constructor23, Base Constructor14, Base Constructor1Derived Constructor1,2,3Derived Destructor4, Base Destructor13, Base Destructor12, Base Destructor21, Base Destructor15.#include#includeusi
11、ng namespace std;class baseprotected: float price; /单价 string place; /产地 int count; /库存量 public: base price=p; count=c; place=pl; void in_something count+=add_t; void out_something ifcountcount=0; /变0保护 小于0的按0计算 else count-=del_t; double total_price return price*count; int r_count return count; ;cla
12、ss shirt:public baseprotected: string material;public: shirt:base material=m; void print coutn衬衣t产地:placet材料:material n库存量:countt单价:pricet总价格total_priceendl; ;class wardrobe:public baseprotected: string wood; string color;public: wardrobe:base wood=w; color=co; void print coutn立柜t产地:placet颜色:colort木
13、料:woodn库存量: countt单价:pricet总价格total_priceendl; ;class cap:public shirtprotected: string style;public: cap:shirt style=st; void print coutn帽子t产地:placet材料:material 样式:stylen库存量:countt单价: pricet总价格total_priceendl; ;int choose /用于判断下一步执行的命令 0.结束1.衬衣2.帽子3.立柜4.查询5.入库6.出库7.出错重输 ifreturn 0; /结束 else ifretur
14、n 1; else ifreturn 2; else ifreturn 3; else ifreturn 4; else ifreturn 5; else ifreturn 6; else ifreturn 8; else return 7;int total_count return a.r_count+b.r_count+c.r_count; /Powered by X.Duke int main/=输入部分 int cho=1,i; /cho为选择计数器 接收choose函数的返回值 通过if语句判断要执行的语句 int ci=0,wi=0,si=0; /标记 角标 float pci5
15、=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_ma
16、t5=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衬衣,帽子,立柜 n实现基本管理功能endln=首先进行初始化工作=endl; cout即将录入商品名称输入0结束endl; while /分类输入 co
17、uttemp; cho=choose; if /shirt -place material ifcout超过最大数量输入限制,跳出;continue; /溢出保护 coutp_temp; /设置帽子单价 cout输入产地 布料 初始数量 并以空格隔开temp1temp2cou_temp; fori=0;i /用于判断是否与之前输入的有冲突 if ifcoutpsisi; cout与之前输入的商品重复,将数量叠加endl;cou_shii+=cou_temp; loop_sw=1; /由于重复 事件开关打开 跳过赋值工作 if psisi=p_temp; pla_shisi=temp1; s_m
18、atsi=temp2; cou_shisi+=cou_temp; /赋值工作 cou_temp=0; /扫尾清零工作 loop_sw=0; /同上 if /cap -place material style ifcout超过最大数量输入限制,跳出;continue; coutp_temp; / cout输入产地 布料 样式 初始数量 并以空格隔开temp1temp2temp3cou_temp; fori=0;i if ifcoutpcici; cout与之前输入的商品重复,将数量叠加endl;cou_capi+=cou_temp; loop_sw=1; if pcici=p_temp; pla
19、_capci=temp1; c_matci=temp2; styci=temp3; cou_capci+=cou_temp; cou_temp=0; loop_sw=0; if /wardrobe -place wood color ifcout超过最大数量输入限制,跳出;continue; coutp_temp; cout输入产地 木料 颜色 初始数量 并以空格隔开temp1temp2temp3cou_temp; fori=0;i if ifcoutpwiwi; cout与之前输入的商品重复,将数量叠加endl;cou_wari+=cou_temp; loop_sw=1; if pwiwi=
20、p_temp; pla_warwi=temp1; woowi=temp2; colwi=temp3; cou_warwi+=cou_temp; cou_temp=0; loop_sw=0; ifcout输入有误 重新; cho=1; /选择计数器重新设置 /开始初始化工作 shirt s_5= shirt, shirt, shirt, shirt, shirt ; cap c_5= cap, cap, cap, cap, cap ; wardrobe w_5= wardrobe, wardrobe, wardrobe, wardrobe, wardrobe ;/输入部分结束/=功能部分 int
21、 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 ifcouttemp; cho=choose; ifcout输入有误 重新; if /查询功能 fori=0;is_i.print; f
22、ori=0;ic_i.print; fori=0;iw_i.print; fori=0;itotal+=total_count; 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帽子总库
23、存:totalcapt价值:ctotaln立柜总库存:totalwart价值:wtotaln所有商品库存总量:totalt总价值:ptotalendl; ifbreak; if /入库 while cout输入要入库的商品种类:;cintemp; cho=choose; ifcouttemp中有以下小类 输入编号进行入库操作; if fori=0;i coutn编号 it产地 pla_shii t布料:s_matit现有 s_i.r_count; coutj; ifcout无商品endl; else whilej=sicoutj; coutcou_temp;s_j.in_something;
24、if fori=0;i coutn编号 it产地 pla_capit布料:c_mati 样式:styit现有 c_i.r_count; ifcout无商品endl; else coutj; whilej=cicoutj; coutcou_temp;c_j.in_something; if fori=0;i coutn编号 it产地 pla_warit木料:wooi 颜色:colit现有 w_i.r_count; ifcout无商品endl; else coutj; whilej=wicoutj; coutcou_temp;w_j.in_something; ifcout有误 重新; cho=5
25、; if /出库 while cout输入要出库的商品种类:;cintemp; cho=choose; ifcouttemp中有以下小类 输入编号进行出库操作; if fori=0;i coutn编程 it产地 pla_shii t布料:s_matit现有 s_i.r_count; coutj; whilej=sicoutj; coutcou_temp;s_j.out_something; if fori=0;i coutn编程 it产地 pla_capit布料:c_mati 样式:styit现有 c_i.r_count; coutj; whilej=cicoutj; coutcou_temp;c_j.out_something; if fori=0;i coutn编程 it产地 pla_warit木料:wooi 颜色:colit现有 w_i.r_count; coutj;whilej=wicoutj; coutcou_temp;w_j.out_something; ifcout有误 重新; cho=6; ifloop_sw=1;cho=4;cout=信息总览=; return 0;附录可包括源程序清单或其它说明19 / 19