面向对象A面向对象习题.docx
- 文档编号:9449053
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:22
- 大小:21.26KB
面向对象A面向对象习题.docx
《面向对象A面向对象习题.docx》由会员分享,可在线阅读,更多相关《面向对象A面向对象习题.docx(22页珍藏版)》请在冰豆网上搜索。
面向对象A面向对象习题
第8章习题:
8-1、设计Date类,输出合法日期。
#include
//类定义//
classDate
{intyear;//存储日期的年份
intmonth;//存储日期的月份
intday;//存储日期的天数
public:
boolsetDate(constint,constint,constint);
voiddisplay(void);
char*getMonth(constint);
};
//类的实现//
//设置成员变量//
//mm:
月份,dd:
天数,yy:
年份//
〃返回值:
如果成功赋值则返回true,否则返回false。
//char*Date:
:
getMonth(constintm)
{if(m==1)
return"January";
elseif(m==2)return"February";
elseif(m==3)
return"March";
elseif(m==4)return"April";
elseif(m==5)return"May";
elseif(m==6)return"June";
elseif(m==7)return"July";
elseif(m==8)return"August";
elseif(m==9)
return"September";
elseif(m==10)return"October";
elseif(m==11)return"November";
else
return"December";
}
//设置成员变量//
〃参数:
mm:
月份,dd:
天数,yy:
年份//
〃返回值:
如果成功赋值则返回true,否则返回false//boolDate:
:
setDate(constintmm,constintdd,constintyy){if(mm<1||mm>12)returnfalse;
if(dd<1||dd>31)returnfalse;
year=yy;
month=mm;
day=dd;
returntrue;
}//在屏幕上显示日期//voidDate:
:
display(void)
{//按照"12-25-2004"的形式输出日期
cout< //按照"December25,2004"的形式输出日期cout< //按照"25December2004"的形式输出日期cout< } voidmain(void) {DatemyDate;//存储日期 while(true){intyear;//临时存储年份intmonth;//临时存储月份intday;//临时存储天数cout«"请按YYYY格式输入年: ";cin>>year; cout«"请按mm格式输入月: ”; cin>>month; cout«"请按dd格式输入日: "; cin>>day;if(myDate.setDate(month,day,year))break; else cout«"日期输入错误,请重新输入! "< } cout«"您输入的日期是: \n"; myDate.display(); } 8-2、设计一个人口类Population,存储某年的人数、出生的人数和死亡人数,其函数成员能返回出生率和死亡率。 #include usingnamespacestd; //类定义// classPopulation {intpnum;//存储某年的人数 intbirthnum;//存储出生的人数 intdeadnum;//存储死亡的人数 public: boolsetData(constint,constint,constint); floatbirthrate(){returnbirthnum/float(pnum);} floatdeadrate(){returndeadnum/float(pnum);} intgetpnum(){returnpnum;} intgetbirthnum(){returnbirthnum;} intgetdeadnum(){returndeadnum;} }; 〃返回值: 如果成功赋值则返回true,否则返回false// boolPopulation: : setData(constintp,constintb,constintd) {if(b>p||b<0)returnfalse; if(d>p||d<0)returnfalse; pnum=p; birthnum=b; deadnum=d; returntrue; } voidmain(void) {Populationpeople; intpn,bn,dn; while(true) { cout<<"请输入总人数: ";cin>>pn; cout<<"请输入出生的人数: ";cin>>bn; cout<<"请输入死亡的人数: ";cin>>dn; if(people.setData(pn,bn,dn)) break; else cout<<"输入错误,请重新输入! "< } coutvv"出生率是: "vvpeople.birthrate()v coutvv"死亡率是: "vvpeople.deadrate()v } 8-3、设计一个类,具有一个float指针成员,且函数成员如下: 1)构造函数具有一个整型参数count,为指针成员分配count个元素空间; 2)析构函数释放该空间; 3)向指针指向的空间存储数据的函数; 4)返回空间中这些数的平均值的函数。 #include #include usingnamespacestd; classDataArray {intlength;//存储数组元素个数 float*fltData;//存储数据 public: DataArray(int=1);//构造函数 ~DataArray();//析构函数 boolsetData(constfloat,constint);//设置成员变量 floatgetAverage(void);//计算并返回平均值 }; //构造函数// 〃count: 希望创建的动态数组元素个数。 // DataArray: : DataArray(intcount) {cout«"调用构造函数…"< if(count>0) {length=count; fltData=newfloat[length]; }else {length=1; fltData=newfloat[length]; } for(inti=0;i fltData[i]=0; } //析构函数// DataArray: : ~DataArray() {cout«"调用析构函数…"< delete[]fltData; length=0; } //设置成员变量// //tData: 要赋给指定变量的值。 // //subscript: 指定要赋值的变量数组元素为第几个。 //〃返回值: 如果成功赋值则返回true,否则返回false。 //boolDataArray: : setData(constfloattData,constintsubscript){if(subscript+1>length) returnfalse; else fltData[subscript]=tData; returntrue; } //计算并返回平均值// //返回值: 返回数组所存储的数据的平均值。 // floatDataArray: : getAverage(void) {floatsum=0; for(inti=0;i sum+=fltData[i]; return(sum/length); } voidmain(void) {//对DataArray类进行测试 cout<<"创建DataArray对象并初始化..."< DataArrayObj(3); cout<<"给DataArray对象赋值: "< for(inti=0;i<3;i++) {//产生一个随机数 floattemp=(float)rand()/10; Obj.setData(temp,i); coutvv"第"vv(i+1)vv"个值为: "vvtempvvendl; } coutvv"平均值为: "v } 8-4、设计一个薪水类Payroll,数据成员包括单位小时工资、已经工作的小时数、本周应付工资数。 在主函数定义一个具有10个元素的对象数组(10个雇员),询问每个雇员本周已经工作的小时数,然后显示应得的工资。 输入有效性检验: 每周工作的小时数不能大于60,也不能为负数。 #includeviostream> #includeviomanip> usingnamespacestd; //薪水类声明// classPayroll {floatpay_per_hour;〃存储每小时的工钱 floathours;//存储雇员工作时间 floattotal_pay;〃存储雇员应得工资 public: Payroll(constfloat=0);//构造函数 boolsetHours(constfloat);/设置工作时间 floatgetPayment(void);//获取应得工资 }; //构造函数// //hour: 雇员工作时间。 // Payroll: : Payroll(constfloathour) {pay_per_hour=5.0f; hours=0; total_pay=0; } //设置工作时间// //hour: 雇员工作时间// 〃返回值: 如果变量赋值成功则返回true,否则返回false。 // boolPayroll: : setHours(constfloathour) {//判断工作时间是否介于0至60之间 if(hour>=0&&hour<=60) {hours=hour; total_pay=pay_per_hour*hours; returntrue; }else returnfalse; } //获取应得工资// //返回值: 返回计算得到的雇员应得的工资// floatPayroll: : getPayment(void) {returntotal_pay; } voidmain(void) {Payrollemployee[10];〃雇员对象数组 //对10个雇员对象进行赋值 for(inti=0;i<10;i++) {floattHour; coutvv"请输入第"vvsetw (2)vv(i+1)vv"个雇员本周已工作的时间(0至60之间): "; while(true) {cin>>tHour; if(employee[i].setHours(tHour)) break; else cout<<"您输入的数据不正确,请重新输入! "< } //显示每个雇员应得的工资for(i=0;i<10;i++) coutvv"第"vvsetw (2)vv(i+1)vv"个雇员应得工资”< : fixed)< (2)< } 8-5、设计InvoiceItem类和商品销售类,完成如下功能: 1)询问客户购买的商品名称和数量; 2)从InvoiceItem对象获得每个商品的成本价; 3)在成本价基础上加上30%利润,得到每个商品的单价; 4)将商品单价与购买数量相乘,得到商品小计; 5)将商品小计乘以6%,得到商品的零售税; 6)将商品小计加上零售税得到该商品的销售额; 7)显示客户本次交易购买商品的小计、零售税和销售额。 有效性检验: 商品数量不能为负数。 #include usingnamespacestd; classInvoiceItem {char*desc; intunits; floatcost; public: InvoiceItem(char*d,intu=0,floatc=0) {desc=newchar[strlen(d)+1]; strcpy(desc,d); units=u; cost=c; } ~InvoiceItem(){delete[]desc;units=0;cost=0;}char*getDesc(){returndesc;} intgetUnits(){returnunits;} floatgetCost(){returncost;}}; classSale{ floatprice,salesum,saletax,totalsum; intbuynum;public: boolsetnum(int,int); voidcalcSale(floatp) {price=p;//单价 salesum=price*buynum;//商品小计 saletax=salesum*0.06;//零售税 totalsum=salesum+saletax;}//销售额floatgetprice(){returnprice;}intgetbuynum(){returnbuynum;}floatgetsalesum(){returnsalesum;}floatgetsaletax(){returnsaletax;}floatgettotalsum(){returntotalsum;}}; boolSale: : setnum(intn,intinvoicenum) { if(n>=0&&n<=invoicenum) {buynum=n; returntrue; }else returnfalse; }voidmain(){ InvoiceItemInventory[3]={ InvoiceItem("ABC",10,0.5f),InvoiceItem("DEF",20,1.2f),InvoiceItem("GHI",30,2.5f), }; Sales1; inti,index=-1; cout<<"库存商品列表: \n"; for(i=0;i<3;i++){ cout<<"名称: "< "; cout< "; cout< }//输出库存商品信息 coutvv"请输入购买的商品名称: "; while(true) {charname[51]; cin.getline(name,51); for(i=0;i<3;i++)if(strcmp(Inventory[i].getDesc(),name)==0)index=i; if(index! =-1)break; elsecoutvv"您输入的商品不存在,请重新输入! "< } coutvv"请输入购买数量: "; while(true) {intnum; cin>>num; if(s1.setnum(num,Inventory[index].getUnits()))break; elsecoutvv"您输入的数量不正确,请重新输入! "< } //计算销售额 s1.calcSale(Inventory[index].getCost()*1.3); //输出销售信息 "vvInventory[index].getDesc()vvendl; "vvs1.getbuynum()vvendl; "vvs1.getprice()vv"元"vvendl; "vvs1.getsalesum()vv元"vvendl; "vvs1.getsaletax()vv"元"vvendl; "vvs1.gettotalsum()vv"元"vvendl; coutvv"本次购买的商品名称coutvv"本次购买的商品数量coutvv"本次购买的商品单价coutvv"本次购买的商品小计coutvv"本次购买的零售税: coutvv"本次购买的销售额: } 第9章习题: 9-1、定义NumDays类,功能是将以小时(hour)为单位的工作时间转换为天数 (day)。 构造函数具有一个代表工作小时的参数,其他函数成员实现小时和天的存储和检索。 同时,该类需重载+、—、++、——运算符。 #include usingnamespacestd; //NumDays类声明// classNumDays {floathour;//以小时存储工作时间 floatday;//以天数存储工作时间 public: NumDays(constfloat=0);//构造函数 voidsetHours(constfloat);//以小时为参数设置成员变量 voidsetDays(constfloat);//以天数为参数设置成员变量 floatgetHours(void);//返回按小时计的工作时间 floatgetDays(void);//返回按天数计的工作时间 floatoperator+(NumDays&);//重载+操作符 floatoperator-(NumDays&);//重载—操作符 NumDaysoperator++();//重载++前置操作符 NumDaysoperator++(int);〃重载++后置操作符 NumDaysoperator--();//重载——前置操作符 NumDaysoperator--(int);〃重载后置操作符 }; //构造函数// //tHour: 工作时间(小时)// NumDays: : NumDays(constfloattHour) {hour=tHour; day=tHour/8; } //以小时为参数设置成员变量// //tHour: 工作时间(小时)。 // voidNumDays: : setHours(constfloattHour) {hour=tHour; day=tHour/8; } //以天数为参数设置成员变量// //tDay: 工作时间(天数)// voidNumDays: : setDays(constfloattDay) {hour=tDay*8; day=tDay; } //返回按小时计的工作时间////返回值: 返回工作时间(小时)//floatNumDays: : getHours(void) {returnhour; } //返回按天数计的工作时间////返回值: 返回工作时间(天数)//floatNumDays: : getDays(void) {returnday; } //重载+操作符// //返回值: 返回两者相加之和(小时)//floatNumDays: : operator+(NumDays&NumDaysObj){return(this->hour+NumDaysObj.hour); } //重载-操作符////返回值: 返回两者相减之差(小时)//floatNumDays: : operator-(NumDays&NumDaysObj){return(this->hour-NumDaysObj.hour); } //重载++前置操作符// NumDaysNumDays: : operator++() {hour++; day=hour/8; return*this; } //重载++后置操作符// NumDaysNumDays: : operator++(int) {NumDaystemp=*this; hour++; day=hour/8; returntemp; //重载--前置操作符//NumDaysNumDays: : operator--(){hour--; day=hour/8; return*this;}//重载--后置操作符//NumDaysNumDays: : operator--(int){NumDaystemp=*this; hour--;day=hour/8;returntemp; } 9-2、在9-1的基础上设计TimeOff类,用于计算雇员生病、休假和不支付报酬的时间。 该类包含下面NumDays类型成员。 maxSickDays: 用来记录雇员因生病可以不工作的最多天数;sickTaken: 记录因生病已经不工作的天数;maxVacation: 记录可以带薪休假的最多天数;vacTaken: 记录已经带薪休假的天数;maxUnpaid: 记录在不支付薪水的情况下,雇员可以休假的最多天数;unpaidTaken: 记录在不支付薪水的情况下,雇员已经休假的天数。 第10章习题: 10-7、定义抽象类BasicShape及其子类Circle和Rectangle,创建Circle和Rectangle类的对象,检验程序能否正确计算各形状的面积。 #include usingnamespacestd; #definePI3.1415926 //BasicShape类声明//classBasicShape {public: doublege
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 习题
![提示](https://static.bdocx.com/images/bang_tan.gif)