面向对象A面向对象习题南航皮德常资料.docx
- 文档编号:7729608
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:34
- 大小:25.48KB
面向对象A面向对象习题南航皮德常资料.docx
《面向对象A面向对象习题南航皮德常资料.docx》由会员分享,可在线阅读,更多相关《面向对象A面向对象习题南航皮德常资料.docx(34页珍藏版)》请在冰豆网上搜索。
面向对象A面向对象习题南航皮德常资料
第8章习题:
8-1、设计Date类,输出合法日期。
#include
usingnamespacestd;
//类定义//
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(p<0)returnfalse; 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<<"输入错误,请重新输入! "< } cout<<"出生率是: "< cout<<"死亡率是: "< } 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); cout<<"第"<<(i+1)<<"个值为: "< } cout<<"平均值为: "< } 8-4、设计一个薪水类Payroll,数据成员包括单位小时工资、已经工作的小时数、本周应付工资数。 在主函数定义一个具有10个元素的对象数组(10个雇员),询问每个雇员本周已经工作的小时数,然后显示应得的工资。 输入有效性检验: 每周工作的小时数不能大于60,也不能为负数。 #include #include 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; cout<<"请输入第"< (2)<<(i+1)<<"个雇员本周已工作的时间(0至60之间): "; while(true) {cin>>tHour; if(employee[i].setHours(tHour)) break; else cout<<"您输入的数据不正确,请重新输入! "< } } //显示每个雇员应得的工资 for(i=0;i<10;i++) cout<<"第"< (2)<<(i+1)<<"个雇员应得工资" < : 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< }//输出库存商品信息 cout<<"请输入购买的商品名称: "; 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; elsecout<<"您输入的商品不存在,请重新输入! "< } cout<<"请输入购买数量: "; while(true) {intnum; cin>>num; if(s1.setnum(num,Inventory[index].getUnits()))break; elsecout<<"您输入的数量不正确,请重新输入! "< } //计算销售额 s1.calcSale(Inventory[index].getCost()*1.3); //输出销售信息 cout<<"本次购买的商品名称: "< cout<<"本次购买的商品数量: "< cout<<"本次购买的商品单价: "< cout<<"本次购买的商品小计: "< cout<<"本次购买的零售税: "< cout<<"本次购买的销售额: "< } 第9章习题: 9-1、定义NumDays类,功能是将以小时(hour)为单位的工作时间转换为天数(day)。 构造函数具有一个代表工作小时的参数,其他函数成员实现小时和天的存储和检索。 同时,该类需重载+、-、++、――运算符。 9-2、设计TimeOff类,用于计算雇员生病、休假和不支付报酬的时间。 9-3、采用TimeOff类定义一个对象。 要求用户输入某雇员已经工作的月数(months),然后采用TimeOff类对象计算并显示雇员因病休假和正常休假的最多天数。 注意: 雇员每月可以有12小时的带薪休假和8小时的生病休假。 //NumDays.h文件// 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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 习题 南航皮德常 资料
![提示](https://static.bdocx.com/images/bang_tan.gif)