面向对象A面向对象习题_第1页
面向对象A面向对象习题_第2页
面向对象A面向对象习题_第3页
面向对象A面向对象习题_第4页
面向对象A面向对象习题_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学习必备欢迎下载第 8 章习题:8-1 、设计 date 类,输出合法日期;#include <iostream> using namespace std;/类定义 /class dateint year; /储备日期的年份 int month;/ 储备日期的月份int day;/储备日期的天数public:bool setdateconst int,const int,const int; void displayvoid;char * getmonthconst int;/类的实现 /设置成员变量 /mm:月份,dd:天数,yy:年份/返回值:假如胜利赋值就返回true,否就返

2、回 false;/ char*date:getmonthconst int m ifm=1return "january" else ifm=2return "february" else ifm=3return "march"else ifm=4 return "april"else ifm=5return "may" else ifm=6return "june" else ifm=7return "july"else ifm=8 return &qu

3、ot;august"else ifm=9学习必备欢迎下载return "september" else ifm=10return "october" else ifm=11return "november"elsereturn "december"/设置成员变量 /参数: mm:月份 ,dd:天数 ,yy:年份 /返回值:假如胜利赋值就返回true,否就返回 false/ bool date:setdateconst int mm,const int dd,const int yyifmm<1 |

4、mm>12 return false; ifdd<1 | dd>31 return false; year=yy;month=mm;day=dd; return true;/在屏幕上显示日期 / void date:displayvoid/根据"12-25-2004"的形式输出日期cout<<month<<"-"<<day<<"-"<<year<<"n"/根据"december25,2004"的形式输出日期

5、 cout<<getmonthmonth<<""<<day<<","<<year<<"n"/根据"25december2004"的形式输出日期cout<<day<<""<<getmonthmonth<<""<<year<<"n"void mainvoiddate mydate;/储备日期 whiletrueint

6、year;/暂时储备年份int month;/ 暂时储备月份int day;/ 暂时储备天数cout<<" 请按 yyyy格式输入年: " cin>>year;学习必备欢迎下载cout<<" 请按 mm 格式输入月: "cin>>month;cout<<" 请按 dd 格式输入日: " cin>>day; ifmydate.setdatemonth,day,yearbreak; elsecout<<" 日期输入错误 ,请重新输入 ."

7、;<<endl;cout<<" 您输入的日期是 :n" mydate.display;8-2 、设计一个人口类population,储备某年的人数、 诞生的人数和死亡人数,其函数成员能返回诞生率和死亡率;#include <iostream> using namespace std;/类定义 /class populationint pnum; /储备某年的人数 int birthnum;/ 储备诞生的人数int deadnum;/储备死亡的人数public:bool setdataconst int,const int,const in

8、t; float birthratereturn birthnum/floatpnum; float deadratereturn deadnum/floatpnum; int getpnumreturn pnum;int getbirthnumreturn birthnum;int getdeadnumreturn deadnum;/返回值:假如胜利赋值就返回true,否就返回 false/ bool population:setdataconst int p,const int b,const int difp<0 return false; ifb>p|b<0 retu

9、rn false; ifd>p|d<0 return false; pnum=p;学习必备欢迎下载birthnum=b; deadnum=d; return true;void mainvoidpopulation people; int pn,bn,dn; whiletruecout<<" 请输入总人数: " cin>>pn;cout<<" 请输入诞生的人数: "cin>>bn;cout<<" 请输入死亡的人数: " cin>>dn; ifpeopl

10、e.setdatapn,bn,dnbreak; elsecout<<" 输入错误 ,请重新输入 ."<<endl;cout<<" 诞生率是 :"<<people.birthrate<<endl;cout<<" 死亡率是 :"<<people.deadrate<<endl;8-3 、设计一个类,具有一个float 指针成员,且函数成员如下:1)构造函数具有一个整型参数count,为指针成员安排count 个元素空间;2)析构函数释放该空间;3

11、)向指针指向的空间储备数据的函数;4)返回空间中这些数的平均值的函数;#include <iostream>#include <cstdlib> using namespace std; class dataarrayint length; /储备数组元素个数float *fltdata;/ 储备数据public:学习必备欢迎下载dataarrayint =1; / 构造函数dataarray;/ 析构函数bool setdataconst float,const int;/设置成员变量 float getaveragevoid; /运算并返回平均值;/构造函数 /co

12、unt:期望创建的动态数组元素个数;/ dataarray:dataarrayint countcout<<" 调用构造函数 ."<<endl;ifcount>0length=count; fltdata=new floatlength;elselength=1;fltdata=new floatlength;forint i=0;i<length;i+ fltdatai=0;/ 析 构 函 数 / dataarray:dataarraycout<<" 调用析构函数 ."<<endl;delet

13、e fltdata; length=0;/设置成员变量 /tdata:要赋给指定变量的值;/subscript:指定要赋值的变量数组元素为第几个;/返回值:假如胜利赋值就返回true,否就返回 false;/ bool dataarray:setdataconst float tdata,const int subscriptifsubscript+1>length return false;elsefltdatasubscript=tdata; return true;学习必备欢迎下载/运算并返回平均值 /返回值:返回数组所储备的数据的平均值;/ float dataarray:get

14、averagevoidfloat sum=0;forint i=0;i<length;i+ sum+=fltdatai;returnsum/length;void mainvoid/对 dataarray 类进行测试cout<<" 创建 dataarray 对象并初始化 ."<<endl; dataarray obj3;cout<<" 给 dataarray 对象赋值: "<<endl;forint i=0;i<3;i+/产生一个随机数float temp=floatrand/10; obj.s

15、etdatatemp,i;cout<<" 第"<<i+1<<" 个值为: "<<temp<<endl;cout<<" 平均值为: "<<obj.getaverage<<endl;8-4 、设计一个薪水类payroll,数据成员包括单位小时工资、 已经工作的小时数、本周应对工资数;在主函数定义一个具有10 个元素的对象数组( 10 个雇员),询问每个雇员本周已经工作的小时数,然后显示应得的工资;输入有效性检验: 每周工作的小时数不能大于60,

16、也不能为负数;#include <iostream>#include <iomanip> using namespace std;/薪水类声明 /class payrollfloat pay_per_hour;/储备每小时的工钱 float hours;/储备雇员工作时间float total_pay;/储备雇员应得工资public:payrollconst float =0;/构造函数学习必备欢迎下载bool sethoursconst float;/设置工作时间float getpaymentvoid;/猎取应得工资;/构造函数 /hour:雇员工作时间; / pa

17、yroll:payrollconst float hourpay_per_hour=5.0f; hours=0; total_pay=0;/设置工作时间 /hour:雇员工作时间 /返回值:假如变量赋值胜利就返回true,否就返回 false;/ bool payroll:sethoursconst float hour/判定工作时间是否介于0 至 60 之间ifhour>=0 && hour<=60hours=hour; total_pay=pay_per_hour * hours; return true;elsereturn false;/猎取应得工资 /返回

18、值:返回运算得到的雇员应得的工资/ float payroll:getpaymentvoidreturn total_pay;void mainvoidpayroll employee10;/雇员对象数组/对 10 个雇员对象进行赋值forint i=0;i<10;i+float thour;cout<<" 请输入第 "<<setw2<<i+1<<" 个雇员本周已工作的时间(0 至 60之间): "whiletruecin>>thour;学习必备欢迎下载ifemployeei.sethou

19、rsthour break;elsecout<<" 您输入的数据不正确,请重新输入."<<endl;/显示每个雇员应得的工资fori=0;i<10;i+cout<<" 第"<<setw2<<i+1<<" 个雇员应得工资 "<<setiosflagsios:fixed<<setprecision2<<employeei.getpayment<<"元"<<endl;8-5 、设计 i

20、nvoiceitem 类和商品销售类,完成如下功能:1)询问客户购买的商品名称和数量;2)从 invoiceitem 对象获得每个商品的成本价;3)在成本价基础上加上30利润,得到每个商品的单价;4)将商品单价与购买数量相乘,得到商品小计;5)将商品小计乘以6,得到商品的零售税;6)将商品小计加上零售税得到该商品的销售额;7)显示客户本次交易购买商品的小计、零售税和销售额;有效性检验:商品数量不能为负数;#include <iostream> using namespace std; classinvoiceitemchar*desc;intfloatunits;cost;publ

21、ic:invoiceitemchar *d, int u=0, float c=0desc = new char strlend+1; strcpydesc, d;units = u;cost = c;invoiceitem delete desc; units = 0;cost = 0; 学习必备欢迎下载char*getdesc returndesc; intgetunits returnunits; floatgetcost returncost; ;class sale float price, salesum, saletax, totalsum; int buynum;public:

22、bool setnumint, int; void calcsalefloat pprice=p;/单价salesum=price*buynum;/商品小计 saletax=salesum*0.06;/零售税 totalsum = salesum + saletax; / 销售额floatgetprice return price; intgetbuynum return buynum; floatgetsalesum return salesum; floatgetsaletax return saletax; floatgettotalsum return totalsum; ;bool

23、sale:setnumint n,int invoicenumifn>=0 && n<=invoicenum buynum=n; return true;elsereturn false;void maininvoiceiteminventory3 = invoiceitem"abc",10,0.5f, invoiceitem"def",20,1.2f, invoiceitem"ghi",30,2.5f,;sale s1;学习必备欢迎下载int i, index=-1;cout << "

24、;库存商品列表: n" fori = 0;i < 3; i+cout<<" 名称: "<<inventoryi.getdesc <<"t数量: "cout<< inventoryi.getunits <<"t成本价: " cout<< inventoryi.getcost <<" 元"<<endl;/输出库存商品信息cout<<" 请输入购买的商品名称 : " whilet

25、ruechar name51; cin.getlinename,51; fori = 0; i < 3; i+ifstrcmpinventoryi.getdesc,name=0index=i; ifindex.=-1break;elsecout<<" 您输入的商品不存在,请重新输入."<<endl;cout<<" 请输入购买数量 : " whiletrueint num; cin>>num;ifs1.setnumnum,inventoryindex.getunitsbreak;elsecout<

26、<" 您输入的数量不正确,请重新输入."<<endl;/运算销售额s1.calcsaleinventoryindex.getcost*1.3;/输出销售信息cout<<" 本次购买的商品名称: "<<inventoryindex.getdesc<<endl;cout<<" 本次购买的商品数量: "<<s1.getbuynum<<endl;cout<<" 本次购买的商品单价: "<<s1.getprice

27、<<" 元"<<endl;cout<<" 本次购买的商品小计: "<<s1.getsalesum<<"元"<<endl;cout<<" 本次购买的零售税: "<<s1.getsaletax<<"元"<<endl; cout<<" 本次购买的销售额: "<<s1.gettotalsum<<"元"<&

28、lt;endl;第 9 章习题:学习必备欢迎下载9-1 、定义 numdays 类,功能是将以小时( hour)为单位的工作时间转换为天数( day);构造函数具有一个代表工作小时的参数,其他函数成员实现小时和天的储备和检索;同时,该类需重载、运算符;9-2 、设计 timeoff 类,用于运算雇员生病、休假和不支付酬劳的时间;9-3 、采纳timeoff类定义一个对象;要求用户输入某雇员已经工作的月数( months),然后采纳 timeoff 类对象运算并显示雇员因病休假和正常休假的最多天数;留意:雇员每月可以有12 小时的带薪休假和8 小时的生病休假;/numdays.h 文件/ cla

29、ss numdaysfloat hour; / 以小时储备工作时间float day;/以天数储备工作时间 public:numdaysconst float =0;/构造函数void sethoursconst float;/以小时为参数设置成员变量void setdaysconst float;/以天数为参数设置成员变量float gethoursvoid;/ 返回按小时计的工作时间float getdaysvoid;/返回按天数计的工作时间float operator +numdays &/ 重载操作符float operator -numdays &/ 重载操作符num

30、days operator +;/重载前置操作符 numdays operator +int;/重载后置操作符numdays operator -;/重载前置操作符numdays operator -int;/重载后置操作符;/构造函数 /thour :工作时间(小时) / numdays:numdaysconst float thourhour=thour; day=thour/8;/以小时为参数设置成员变量/thour :工作时间(小时) ;/void numdays:sethoursconst float thourhour=thour; day=thour/8;学习必备欢迎下载/以天数

31、为参数设置成员变量/tday:工作时间(天数) /void numdays:setdaysconst float tdayhour=tday*8; day=tday;/返回按小时计的工作时间/返回值:返回工作时间(小时)/ float numdays:gethoursvoidreturn hour;/返回按天数计的工作时间/返回值:返回工作时间(天数)/ float numdays:getdaysvoidreturn day;/重载操作符 /返回值:返回两者相加之和(小时)/float numdays:operator +numdays &numdaysobjreturnthis-&g

32、t;hour+numdaysobj.hour;/重载操作符 /返回值:返回两者相减之差(小时)/float numdays:operator -numdays &numdaysobjreturnthis->hour-numdaysobj.hour;/ 重 载 前 置 操 作 符 / numdays numdays:operator +hour+; day=hour/8; return *this;/重载后置操作符 /numdays numdays:operator +intnumdays temp=*this; hour+;学习必备欢迎下载day=hour/8; return t

33、emp;/ 重 载 前 置 操 作 符 / numdays numdays:operator -hour-; day=hour/8; return *this;/重载后置操作符 /numdays numdays:operator -intnumdays temp=*this; hour-;day=hour/8; return temp;/timeoff.h 文件#include"numdays.h" class timeoffchar name20,id10; numdays maxsickdays; numdays sicktaken; numdays maxvacati

34、on; numdays vactaken; numdays maxunpaid; numdays unpaidtaken;public:timeofffloat,float,float,char *,char *;/ 设置答应的最多小时数及雇员姓名工号void setsicktakennumdays &sickobj; void setvactakennumdays &vacobj;void setunpaidtakennumdays &unpaidobj;char * getnamereturn name; char * getidreturn id;学习必备欢迎下载

35、numdays getmaxsickdaysreturn maxsickdays; numdays getsicktakenreturn sicktaken; numdays getmaxvacationreturn maxvacation; numdays getvactakenreturn vactaken; numdays getmaxunpaidreturn maxunpaid; numdays getunpaidtakenreturn unpaidtaken;timeoff:timeofffloat maxsickh,float maxvach,float maxunph,char

36、*n,char *i:maxsickdaysmaxsickh,maxvacationmaxvach,maxunpaidmaxunphstrcpyname,n; strcpyid,i;void timeoff:setsicktakennumdays &sickobjfloat sickhours; sickhours=sicktaken+sickobj; sicktaken.sethourssickhours;void timeoff:setvactakennumdays &vacobjfloat vachours; vachours=vactaken+vacobj; vacta

37、ken.sethoursvachours;void timeoff:setunpaidtakennumdays &unpaidobjfloat unpaidhours; unpaidhours=unpaidtaken+unpaidobj; unpaidtaken.sethoursunpaidhours;/main.cpp#include<iostream> using namespace std;#include"timeoff.h"学习必备欢迎下载void maintimeoff employee8,12,24,"张三","

38、;0007" int months;cout<<" 请输入 "<<employee.getname<<"已经工作的月数 :n"cin>>months;forint i=1;i<=months;i+float hours; numdays offobj;cout<<" 请输入第 "<<i<<" 个月生病休假的累计小时数:n"cin>>hours; ifhours>employee.getmaxsick

39、days.gethourscout<<"该月超过标准的生病休假小时数:"<<employee.getmaxsickdays.gethours<<"小时! n" offobj.sethourshours; employee.setsicktakenoffobj;cout<<" 请输入第 "<<i<<" 个月带薪休假的累计小时数:n"cin>>hours; ifhours>employee.getmaxvacation.getho

40、urscout<<"该月超过标准的带薪休假小时数:"<<employee.getmaxvacation.gethours<<"小时! n" offobj.sethourshours; employee.setvactakenoffobj;cout<<" 请输入第 "<<i<<" 个月不带薪休假的累计小时数:n"cin>>hours; ifhours>employee.getmaxunpaid.gethourscout<&

41、lt;"该月超过标准的不带薪休假小时数:"<<employee.getmaxunpaid.gethours<<"小时! n" offobj.sethourshours; employee.setunpaidtakenoffobj;cout<<employee.getname<<"的休假天数统计如下: n" cout<<" 因病休假的天数为 :t"<<employee.getsicktaken.getdays<<endl; cout&

42、lt;<" 带薪休假的天数为 :t"<<employee.getvactaken.getdays<<endl; cout<<"不带薪休假的天数学习必备欢迎下载为:t"<<employee.getunpaidtaken.getdays<<endl;第 10 章习题:10-2 、设计 employee 类,其数据成员能储存如下信息:雇员姓名: char *指针;雇员编号:格式为xxx-l , x 是 09 之间的数字, l 是 am之间的字母;受雇日期:向该类增加构造函数、析构函数和其他相关函

43、数成员;设计 employee 类的子类 employeepay,其具有如下数据成员: 月工资: double 型变量;部门号: int 型变量;编写完整的程序,要求用户从键盘输入雇员信息,然后在屏幕上显示这些信息;/employee.h#include<cctype> using namespace std; class employeeprotected:char * name;char employcode6; char employdate9;public:employeechar *;bool setemploycodechar *; bool setemploydate

44、char *;employee;char *getnamereturn name;char *getemploycodereturn employcode; char *getemploydatereturn employdate;employee:employeechar *nname = new charstrlenn + 1; strcpyname,n;学习必备欢迎下载employee:employeedelete name;bool employee:setemploycodechar* cifstrlenc.=5cout<<" 编号长度为 5 个字符,请重输!

45、n" return false; else if.isdigitc0|.isdigitc1|.isdigitc2cout<<" 编号前三位必需是09 的数字,请重输! n" return false;else ifc3.='-'cout<<" 编号第四位必需是 -,请重输! n" return false; else ifc4>'m'|c4<'a'cout<<" 编号第五位必需是am之间的字母,请重输!n" return fals

46、e;elsestrcpyemploycode,c; return true;bool employee:setemploydatechar* dlong tmp,yy,mm,dd; ifstrlend.=8cout<<" 日期长度为 8 个字符,请重输! n" return false;elsetmp=atoid;yy=tmp/10000;mm=tmp/100%100;dd=tmp%100; ifyy<2000cout<<" 受雇年份应大于2000,请重输! n" return false;else ifmm<1|mm

47、>12cout<<" 月份应在 112 之间,请重输! n" return false; else ifdd<1|dd>31cout<<" 日期应在 131 之间,请重输! n" return false;elsestrcpyemploydate,d; return true;/employeepay.h#include"employee.h"学习必备欢迎下载class employeepay : public employeeprotected:double monthpay; int de

48、partnum;public:employeepaychar *,int;void setmonthpaydouble pmonthpay=p; double getmonthpayreturn monthpay; int getdepartnumreturn departnum; void infoshow;employeepay:employeepaychar* n,int dnum: employeendepartnum=dnum;void employeepay:infoshowcout<<" 雇员的信息如下: n"cout<<"

49、姓名: t"<<name<<endl;cout<<" 编号: t"<<employcode<<endl;cout<<" 受雇日期: t"<<employdate<<endl;cout<<" 部门号: t"<<departnum<<endl;cout<<" 月工资: t"<<monthpay<<endl;/main.cpp#include&l

50、t;iostream> using namespace std;#include"employeepay.h" void mainemployeepay empay"张三",2; double p;cout<<" 请输入 "<<empay.getname<<"的编号: n"whiletruechar c6;学习必备欢迎下载cin.getlinec,6; ifempay.setemploycodec break;cout<<" 请输入 "<

51、;<empay.getname<<"的受雇日期: n" whiletruechar d9; cin.getlined,9;ifempay.setemploydatedbreak;cout<<" 请输入 "<<empay.getname<<"的月工资: n" cin>>p;empay.setmonthpayp; empay.infoshow;10-3 、设计 employeepay的子类 hourlypay,其数据成员能储备如下信息:正常工作每小时的工资、超时工作每小时的

52、工资和已经工作的小时数;编写程序,要求用户输入信息并做有效性检验;/employee.h 见上题/employeepay.h见上题/hourlypay.h#include"employeepay.h"class hourlypay : public employeepayprotected:double hourpay,exhourpay; int hours,exhours;public:hourlypaychar*,int; bool sethourpaydouble;bool setexhourpaydouble; bool sethoursint;bool sete

53、xhoursint;void setmonthpaymonthpay=hourpay*hours+exhourpay*exhours;hourlypay:hourlypaychar* n,int d:employeepayn,d学习必备欢迎下载bool hourlypay:sethourpaydouble hpifhp<0|hp>50 return false; hourpay=hp;return true;bool hourlypay:setexhourpaydouble exhpifexhp<0|exhp>100 return false; exhourpay=ex

54、hp;return true;bool hourlypay:sethoursint hifh<0|h>176 return false; hours=h;return true;bool hourlypay:setexhoursint exhifexh<0|exh>64 return false; exhours=exh;return true;/main.cpp#include<iostream> using namespace std;#include"hourlypay.h"void mainhourlypay empay"

55、; 张 三 ",2; cout<<" 请输入 "<<empay.getname<<"的正常工作小时工资: n"whiletruedouble hp;学习必备欢迎下载cin>>hp; ifempay.sethourpayhpbreak;else cout<<"正常工作小时工资应在150 之间,请重输! n"cout<<" 请输入 "<<empay.getname<<"的超时工作小时工资: n"

56、 whiletruedouble exhp; cin>>exhp;ifempay.setexhourpayexhpbreak;else cout<<"超时工作小时工资应在1100 之间,请重输! n"cout<<" 请输入 "<<empay.getname<<"的正常工作小时数: n" whiletrueint h; cin>>h;ifempay.sethoursh break;else cout<<"正常工作小时数应在1176 之间,请重输

57、! n"cout<<" 请输入 "<<empay.getname<<"的超时工作小时数: n" whiletrueint exh; cin>>exh;ifempay.setexhoursexhbreak;else cout<<"超时工作小时数应在164 之间,请重输! n"empay.setmonthpay; cout<<empay.getname<<"的月工资为: "<<empay.getmonthpay;1

58、0-6 、(略)10-7 、定义抽象类 basicshape及其子类 circle 和 rectangle,创建 circle 和 rectangle类的对象,检验程序能否正确运算各外形的面积;#include <iostream> using namespace std;#define pi 3.1415926/basicshape类声明 /学习必备欢迎下载class basicshapepublic:double getareavoid return area;/ 返回面积virtual void calcareavoid =0;/ 运算面积protected:double a

59、rea;/储备面积;/circle 类声明 /class circle:public basicshapepublic:circleint x=0,int y=0,double r=0/构造函数 centerx=x; centery=y; radius=r; calcarea;int getcenterxvoid return centerx;/ 返回圆心 x 坐标int getcenteryvoid return centery;/ 返回圆心 y 坐标void calcareavoid area=pi*radius*radius;/ 运算圆面积private:int centerx; /储备圆心 x 坐标int centery; /储备圆心 y 坐标double radius; /储备圆半径;/rectan

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论