面向对象A面向对象习题.docx

上传人:b****8 文档编号:9449053 上传时间:2023-02-04 格式:DOCX 页数:22 大小:21.26KB
下载 相关 举报
面向对象A面向对象习题.docx_第1页
第1页 / 共22页
面向对象A面向对象习题.docx_第2页
第2页 / 共22页
面向对象A面向对象习题.docx_第3页
第3页 / 共22页
面向对象A面向对象习题.docx_第4页
第4页 / 共22页
面向对象A面向对象习题.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

面向对象A面向对象习题.docx

《面向对象A面向对象习题.docx》由会员分享,可在线阅读,更多相关《面向对象A面向对象习题.docx(22页珍藏版)》请在冰豆网上搜索。

面向对象A面向对象习题.docx

面向对象A面向对象习题

第8章习题:

8-1、设计Date类,输出合法日期。

#includeusingnamespacestd;

//类定义//

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1