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

下载本文档

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

文档简介

1、第8章习题:8-1、设计Date类,输出合法日期。#include <iostream>using namespace std;/类定义/class Dateint year; /存储日期的年份int month;/存储日期的月份int day;/存储日期的天数public:bool setDate(const int,const int,const int);void display(void);char * getMonth(const int);/类的实现/设置成员变量/mm:月份,dd:天数,yy:年份/返回值:如果成功赋值则返回true,否则返回false。/char*

2、Date:getMonth(const int m )if(m=1)return "January"else if(m=2)return "February"else if(m=3)return "March"else if(m=4)return "April"else if(m=5)return "May"else if(m=6)return "June"else if(m=7)return "July"else if(m=8)return "

3、August"else if(m=9)return "September"else if(m=10)return "October"else if(m=11)return "November"elsereturn "December"/设置成员变量/参数:mm:月份,dd:天数,yy:年份/返回值:如果成功赋值则返回true,否则返回false/bool Date:setDate(const int mm,const int dd,const int yy)if(mm<1 | mm>12) r

4、eturn false;if(dd<1 | dd>31) return false;year=yy;month=mm;day=dd;return true;/在屏幕上显示日期/void Date:display(void)/ 按照"12-25-2004"的形式输出日期cout<<month<<"-"<<day<<"-"<<year<<"n"/ 按照"December 25,2004"的形式输出日期cout<

5、<getMonth(month)<<" "<<day<<", "<<year<<"n"/ 按照"25 December 2004"的形式输出日期cout<<day<<" "<<getMonth(month)<<" "<<year<<"n"void main(void)Date myDate;/存储日期while(true

6、)int year;/临时存储年份int month;/临时存储月份int day;/临时存储天数cout<<"请按YYYY格式输入年:"cin>>year;cout<<"请按mm格式输入月:"cin>>month;cout<<"请按dd格式输入日:"cin>>day;if(myDate.setDate(month,day,year)break;elsecout<<"日期输入错误,请重新输入!"<<endl;cout&l

7、t;<"您输入的日期是:n"myDate.display();8-2、设计一个人口类Population,存储某年的人数、出生的人数和死亡人数,其函数成员能返回出生率和死亡率。#include <iostream>using namespace std;/类定义/class Populationint pnum; /存储某年的人数int birthnum;/存储出生的人数int deadnum;/存储死亡的人数public:bool setData(const int,const int,const int);float birthrate()return

8、 birthnum/float(pnum);float deadrate()return deadnum/float(pnum);int getpnum()return pnum;int getbirthnum()return birthnum;int getdeadnum()return deadnum;/返回值:如果成功赋值则返回true,否则返回false/bool Population:setData(const int p,const int b,const int d)if(b>p|b<0) return false;if(d>p|d<0) return f

9、alse;pnum=p;birthnum=b;deadnum=d;return true;void main(void)Population people;int pn,bn,dn;while(true)cout<<"请输入总人数:"cin>>pn;cout<<"请输入出生的人数:"cin>>bn;cout<<"请输入死亡的人数:"cin>>dn;if(people.setData(pn,bn,dn)break;elsecout<<"输入错误

10、,请重新输入!"<<endl;cout<<"出生率是: "<<people.birthrate()<<endl;cout<<"死亡率是: "<<people.deadrate()<<endl;8-3、设计一个类,具有一个float指针成员,且函数成员如下:1)构造函数具有一个整型参数count,为指针成员分配count个元素空间;2)析构函数释放该空间;3)向指针指向的空间存储数据的函数;4)返回空间中这些数的平均值的函数。#include <iostre

11、am>#include <cstdlib>using namespace std;class DataArrayint length; /存储数组元素个数float *fltData;/存储数据public:DataArray(int =1); /构造函数DataArray();/析构函数bool setData(const float,const int);/设置成员变量float getAverage(void); /计算并返回平均值;/构造函数/count:希望创建的动态数组元素个数。/DataArray:DataArray(int count)cout<<

12、"调用构造函数."<<endl;if(count>0)length=count;fltData=new floatlength;elselength=1;fltData=new floatlength;for(int i=0;i<length;i+)fltDatai=0;/析构函数/DataArray:DataArray()cout<<"调用析构函数."<<endl;delete fltData;length=0;/设置成员变量/tData:要赋给指定变量的值。/subscript:指定要赋值的变量数组元素

13、为第几个。/返回值:如果成功赋值则返回true,否则返回false。/bool DataArray:setData(const float tData,const int subscript)if(subscript+1>length)return false;elsefltDatasubscript=tData;return true;/计算并返回平均值/返回值:返回数组所存储的数据的平均值。/float DataArray:getAverage(void)float sum=0;for(int i=0;i<length;i+)sum+=fltDatai;return(sum/l

14、ength);void main(void)/对DataArray类进行测试cout<<"创建DataArray对象并初始化."<<endl;DataArray Obj(3);cout<<"给DataArray对象赋值:"<<endl;for(int i=0;i<3;i+)/ 产生一个随机数float temp=(float)rand()/10;Obj.setData(temp,i);cout<<"第"<<(i+1)<<"个值为:&qu

15、ot;<<temp<<endl;cout<<"平均值为:"<<Obj.getAverage()<<endl;8-4、设计一个薪水类Payroll,数据成员包括单位小时工资、已经工作的小时数、本周应付工资数。在主函数定义一个具有10个元素的对象数组(10个雇员),询问每个雇员本周已经工作的小时数,然后显示应得的工资。输入有效性检验:每周工作的小时数不能大于60,也不能为负数。#include <iostream>#include <iomanip>using namespace std;/薪水

16、类声明/class Payrollfloat pay_per_hour;/存储每小时的工钱float hours;/存储雇员工作时间float total_pay;/存储雇员应得工资public:Payroll(const float =0);/构造函数bool setHours(const float);/设置工作时间float getPayment(void);/获取应得工资;/构造函数/hour:雇员工作时间。/Payroll:Payroll(const float hour)pay_per_hour=5.0f;hours=0;total_pay=0;/设置工作时间/hour:雇员工作时

17、间/返回值:如果变量赋值成功则返回true,否则返回false。/bool Payroll:setHours(const float hour)/判断工作时间是否介于0至60之间if(hour>=0 && hour<=60)hours=hour;total_pay=pay_per_hour * hours;return true;elsereturn false;/获取应得工资/返回值:返回计算得到的雇员应得的工资/float Payroll:getPayment(void)return total_pay;void main(void)Payroll employ

18、ee10;/雇员对象数组/对10个雇员对象进行赋值for(int i=0;i<10;i+)float tHour;cout<<"请输入第"<<setw(2)<<(i+1)<<"个雇员本周已工作的时间(0至60之间):"while(true)cin>>tHour;if(employeei.setHours(tHour)break;elsecout<<"您输入的数据不正确,请重新输入!"<<endl;/显示每个雇员应得的工资for(i=0;i<

19、10;i+)cout<<"第"<<setw(2)<<(i+1)<<"个雇员应得工资"<<setiosflags(ios:fixed)<<setprecision(2)<<employeei.getPayment()<<"元"<<endl;8-5、设计InvoiceItem类和商品销售类,完成如下功能:1)询问客户购买的商品名称和数量;2)从InvoiceItem对象获得每个商品的成本价;3)在成本价基础上加上30利润,得到每个商

20、品的单价;4)将商品单价与购买数量相乘,得到商品小计;5)将商品小计乘以6,得到商品的零售税;6)将商品小计加上零售税得到该商品的销售额;7)显示客户本次交易购买商品的小计、零售税和销售额。有效性检验:商品数量不能为负数。#include <iostream>using namespace std;class InvoiceItem char *desc; int units;floatcost;public: InvoiceItem(char *d, int u=0, float c=0) desc = new char strlen(d)+1;strcpy(desc, d);

21、units = u;cost = c; InvoiceItem( ) delete desc; units = 0;cost = 0; char *getDesc( ) return desc; int getUnits( ) return units; float getCost( ) return cost; ;class Sale float price, salesum, saletax, totalsum;int buynum;public:bool setnum(int, int);void calcSale(float p) price=p;/单价salesum=price*bu

22、ynum;/商品小计saletax=salesum*0.06;/零售税totalsum = salesum + saletax; /销售额float getprice() return price; int getbuynum() return buynum; float getsalesum() return salesum; float getsaletax() return saletax; float gettotalsum() return totalsum; ;bool Sale:setnum(int n,int invoicenum)if(n>=0 && n

23、<=invoicenum )buynum=n;return true;elsereturn false;void main()InvoiceItem Inventory3 = InvoiceItem("ABC",10,0.5f),InvoiceItem("DEF",20,1.2f), InvoiceItem("GHI",30,2.5f), ;Sale s1;int i, index=-1;cout << "库存商品列表:n" for(i = 0; i < 3; i+) cout <&l

24、t;"名称:"<<Inventoryi.getDesc( )<<"t数量:"cout << Inventoryi.getUnits( )<<"t成本价:"cout << Inventoryi.getCost( )<<"元"<<endl; /输出库存商品信息cout<<"请输入购买的商品名称: "while(true)char name51;cin.getline(name,51);for(i = 0;

25、 i < 3; i+) if(strcmp(Inventoryi.getDesc(),name)=0)index=i;if(index!=-1)break;elsecout<<"您输入的商品不存在,请重新输入!"<<endl;cout<<"请输入购买数量: "while(true)int num;cin>>num;if(s1.setnum(num,Inventoryindex.getUnits()break;elsecout<<"您输入的数量不正确,请重新输入!"<

26、;<endl;/计算销售额s1.calcSale(Inventoryindex.getCost()*1.3);/输出销售信息cout<<"本次购买的商品名称:"<<Inventoryindex.getDesc()<<endl;cout<<"本次购买的商品数量:"<<s1.getbuynum()<<endl;cout<<"本次购买的商品单价:"<<s1.getprice()<<"元"<<end

27、l;cout<<"本次购买的商品小计:"<<s1.getsalesum()<<"元"<<endl;cout<<"本次购买的零售税:"<<s1.getsaletax()<<"元"<<endl;cout<<"本次购买的销售额:"<<s1.gettotalsum()<<"元"<<endl;第9章习题:9-1、定义NumDays类,功能是将以

28、小时(hour)为单位的工作时间转换为天数(day)。构造函数具有一个代表工作小时的参数,其他函数成员实现小时和天的存储和检索。同时,该类需重载、运算符。#include <iostream>using namespace std;/NumDays类声明/class NumDaysfloat hour; /以小时存储工作时间float day;/以天数存储工作时间public:NumDays(const float =0);/构造函数void setHours(const float);/以小时为参数设置成员变量void setDays(const float);/以天数为参数设置

29、成员变量float getHours(void);/返回按小时计的工作时间float getDays(void);/返回按天数计的工作时间float operator +(NumDays &);/重载操作符float operator -(NumDays &);/重载操作符NumDays operator +();/重载前置操作符NumDays operator +(int);/重载后置操作符NumDays operator -();/重载前置操作符NumDays operator -(int);/重载后置操作符;/构造函数/tHour:工作时间(小时)/NumDays:Num

30、Days(const float tHour)hour=tHour;day=tHour/8;/以小时为参数设置成员变量/tHour:工作时间(小时)。/void NumDays:setHours(const float tHour)hour=tHour;day=tHour/8;/以天数为参数设置成员变量/tDay:工作时间(天数)/void NumDays:setDays(const float tDay)hour=tDay*8;day=tDay;/返回按小时计的工作时间/返回值:返回工作时间(小时)/float NumDays:getHours(void)return hour;/返回按天数

31、计的工作时间/返回值:返回工作时间(天数)/float NumDays:getDays(void)return day;/重载操作符/返回值:返回两者相加之和(小时)/float NumDays:operator +(NumDays &NumDaysObj)return(this->hour+NumDaysObj.hour);/重载操作符/返回值:返回两者相减之差(小时)/float NumDays:operator -(NumDays &NumDaysObj)return(this->hour-NumDaysObj.hour);/重载前置操作符/NumDays N

32、umDays:operator +()hour+;day=hour/8;return *this;/重载后置操作符/NumDays NumDays:operator +(int)NumDays temp=*this;hour+;day=hour/8;return temp;/重载前置操作符/NumDays NumDays:operator -()hour-;day=hour/8;return *this;/重载后置操作符/NumDays NumDays:operator -(int)NumDays temp=*this;hour-;day=hour/8;return temp;9-2、在9-1

33、的基础上设计TimeOff类,用于计算雇员生病、休假和不支付报酬的时间。该类包含下面NumDays类型成员。maxSickDays:用来记录雇员因生病可以不工作的最多天数;sickTaken:记录因生病已经不工作的天数;maxVacation:记录可以带薪休假的最多天数;vacTaken:记录已经带薪休假的天数;maxUnpaid: 记录在不支付薪水的情况下,雇员可以休假的最多天数;unpaidTaken:记录在不支付薪水的情况下,雇员已经休假的天数。第10章习题:10-7、定义抽象类BasicShape及其子类Circle和Rectangle,创建Circle和Rectangle类的对象,检

34、验程序能否正确计算各形状的面积。#include <iostream>using namespace std;#define PI 3.1415926/BasicShape类声明/class BasicShapepublic:double getArea(void) return area;/返回面积virtual void calcArea(void) =0;/计算面积 protected:double area;/存储面积;/Circle类声明/class Circle:public BasicShapepublic:Circle(int X=0,int Y=0,double

35、R=0)/构造函数centerX=X;centerY=Y;radius=R;calcArea();int getCenterX(void) return centerX;/返回圆心X坐标int getCenterY(void) return centerY;/返回圆心Y坐标void calcArea(void) area=PI*radius*radius;/计算圆面积 private:int centerX; /存储圆心X坐标int centerY; /存储圆心Y坐标double radius; /存储圆半径;/Rectangle类声明class Rectangle:public BasicS

36、hapepublic:Rectangle(long W=0,long L=0)/构造函数width=W;length=L;calcArea();long getWidth(void) return width; /返回矩形的宽long getLength(void) return length;/返回举行的长void calcArea(void) area=width*length;/计算矩形面积private:long width; /存储矩形的宽long length;/存储矩形的长;void main(void)/测试Circle类cout<<"创建一个Circle

37、对象."<<endl;Circle myCircle(0,0,11.4);cout<<"centerX="<<myCircle.getCenterX()<<endl;cout<<"centerY="<<myCircle.getCenterY()<<endl;cout<<"radius=11.4"<<endl;cout<<"Area="<<myCircle.getArea()&

38、lt;<endl<<endl;/测试Rectangle类cout<<"创建一个Rectangle对象."<<endl;Rectangle myRectangle(12,15);cout<<"width="<<myRectangle.getWidth()<<endl;cout<<"length="<<myRectangle.getLength()<<endl;cout<<"Area="<

39、<myRectangle.getArea()<<endl<<endl;第11章习题:11-1、Date类异常。#include <iostream>using namespace std;class Datepublic:bool setDate(const int,const int,const int);void display(void);char * getMonth(const int);class InvalidDay ;/异常类class InvalidMonth ;/异常类private:int year;/存储日期的年份int mon

40、th; /存储日期的月份int day; /存储日期的天数;/设置成员变量 /参数:mm:月份。dd:天数。yy:年份。/返回值:如果成功赋值则返回true,否则返回false/char* Date:getMonth(const int m )if(m=1)return "January"else if(m=2)return "February"else if(m=3)return "March"else if(m=4)return "April"else if(m=5)return "May"else if(m=6)return "June"else if(m=7)return "July"else if(m=8)return "August"else if(m=9)return "

温馨提示

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

评论

0/150

提交评论