C++补充作业Word格式文档下载.docx
《C++补充作业Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C++补充作业Word格式文档下载.docx(21页珍藏版)》请在冰点文库上搜索。
![C++补充作业Word格式文档下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/9/45df92c9-ca21-4335-ba71-9f9b1e20465a/45df92c9-ca21-4335-ba71-9f9b1e20465a1.gif)
{
Number=m;
}
voidPrintInfor()
PrintName();
Numberofstudent"
intNumber:
return0;
2.编程体会包含内A嵌对象多继承派生类的带参构造函数和析构函数调用顺序。
声明三个基类Base1、Base2和Base3,然后从这三个基类按照公有方式派生出类Derived。
在三个基类中分别定义带一个整型参数的构造函数和析构函数输出提示信息,提示信息中需要包含整型参数的数值。
在派生类Derived中需要包含三个基类的内嵌对象,和相应的构造函数和析构函数用于输出提示信息,在构造函数中包含七个整型参量,其中六个用于初始化派生类和内嵌对象。
intmain(){DerivedobjD(1,2,3,4,5,6,7);
}
#include<
classBase1
Base1(intb)
{cout<
Base1constructorcalled"
b<
~Base1()
Base1destrutorcalled"
classBase2
Base2(intb)
Base2constructorcalled"
~Base2()
Base2destrutorcalled"
classBase3
Base3(intb)
Base3constructorcalled"
~Base3()
Base3destrutorcalled"
classDerived:
publicBase3,publicBase1,publicBase2
public:
Derived(inta,intb,intc,intd,inte,intf,intg):
T(intc),F(intb),R(intd),Base3(intg),Base1(inte),Base2(intf)
{
cout<
Derivedconstructorcalled"
a<
}
~Derived()
Deriveddestructorcalled"
private:
Base2T;
base1F;
Base3R;
};
习题六
3、
(1)
classPoint
Point(inta,intb)
x=a;
y=b;
~Point(){
cout<
execatingPointdestructor"
voiddisplay()
("
x<
"
y<
)"
intx;
inty;
classCircle:
publicPoint
Circle(inta,intb,intr):
Point(a,b),radius(r){}
~Circle(){cout<
execatingCircledestructor"
display();
radius="
radius<
intradius;
Point*p=newCircle;
Pointm(3,6);
Point*k=&
m;
k->
display();
Circlec(3,6,5);
Point*pt=&
c;
pt->
deletep;
第六章作业题:
第一题:
1.声明一个抽象类Med作为基类,其中仅包含一个string类型数据成员title(名称)和两个纯虚函数print()和id()。
然后派生出Book类,CD类和Mag类。
在Book类中,包含3个string类型数据成员author(作者),pub(出版者),isbn(书号)和函数成员print()和id()。
在CD类中,包含3个string类型数据成员composer(制作者),make(介质形式),number(编号)和函数成员print()和id()。
在Mag类中,包含2个string类型数据成员issn(杂志编号),pub(出版者),两个整型数据成员volume(卷),number(号)和函数成员print()和id()。
cstring>
cladd__Med
{public:
virtualvoidprint();
virtualvoidid();
protected:
stringtitle;
classBook:
publicMed
Book();
Book(stringau,stringpub,stringis,stringt):
Med(t)
Author=au;
Publisher=pub;
isbn=is;
title=t;
voidprint();
voidId();
stringAuthor;
stringPublisher;
stringisbn;
voidBook:
print()
title<
Author:
Author<
"
Publisher:
Publisher<
classCD:
CD();
CD(stringc,stringm,stringnum):
composer=c;
make=m;
number=num;
stringcomposer;
stringnumber;
stringmake;
voidCD:
CDcomposer:
composer<
id()
make:
make<
id:
number<
classMag:
Mag();
Mag(stringt,stringi,stringpub,stringmag):
issn=i;
publisher=pub;
Magzine=mag;
stringissn;
stringMagzine;
stringpublisher;
voidMag:
publisher<
Magzine:
Magzine<
Id()
Id:
issn<
Bookbook("
张三"
C++语言程序设计"
清华大学出版社"
0-000-00000-1"
);
Magmag("
辨析C/C++编程模式"
0000-0000x"
浙江大学出版社
vol.16"
showMedia(book);
showMedia(mag);
showMedia(cd);
voidshowMedia(Med&
p)
p.print();
\tId:
p.Id()<
第二题:
2.设计一个抽象基类Worker,并从该基类中派生出计时工人类HourlyWorker和计薪工人类SalariedWorker。
每名工人都具有姓名name、年龄age、性别sex和小时工资额pay_per_hour等属性;
周薪计算成员函数voidCompute_pay(doublehours),
(其中参数hours为每周的实际工作时数)和用于显示工人的基本信息的标准输出运算符友元函数ostream&
operator<
(ostream&
out,Worker&
worker)。
工人的薪金等级以小时工资额划分:
计时工人的薪金等级分为10、20和40US$/hour三个等级;
计薪工人的薪金等级,分为30和50US$/hour两个等级。
不同类别和等级工人的周薪计算方法不同,计时工人周薪的计算方法是:
如果每周的工作时数(hours)在40以内,则周薪=小时工资额×
实际工作时数;
如果每周的工作时数(hours)超过40,则周薪=小时工资额×
40+1.5×
小时工资额×
(实际工作时数–40)。
而计薪工周薪的计算方法是:
如果每周的实际工作时数不少于35小时,则按40小时计周薪(允许有半个工作日的事/病假),超出40小时部分不计薪,即周薪=小时工资额×
40;
如果每周的实际工作时数少于35小时(不含35小时),则周薪=小时工资额实际工作时数+0.5×
(35-实际工作时数)。
1.定义Worker、HourlyWorker和SalariedWorker类,并实现它们的不同周薪计算方法。
2.在主函数main()中使用HourlyWorker和SalariedWorker类完成如下操作:
①通过控制台输入、输出操作顺序完成对5个不同工人的基本信息(姓名、年龄、性别、类别和薪金等级)的注册。
注意,5个工人应分属于两类工人的5个等级。
②通过一个菜单结构实现在5个工人中可以任意选择一个工人,显示该工人的基本信息,根据每周的实际工作时数(通过控制台输入)计算并显示该工人的周薪。
stdio.h>
classWorker
Worker();
Worker(stringn,inta,chars,floatp)
name=n;
age=a;
sex=s;
pay_per_hour=p;
voidName()
swith(choice)
case1:
name=name1;
break;
case2:
name=name2;
case3:
name=name3;
case4:
name=name4;
case4:
case5:
name=name5;
virtualvoidCompute_pay(doublehours)=0;
virtualfriendostream&
operator<
(ostream&
out,Worker&
Worker);
stringname;
intage;
charsex;
intchoice;
floatpay_per_hour;
ostream&
output,Worker&
w)
output<
w.name<
w.age<
w.sex<
w.pay_per_hour<
returnoutput;
classHourlyWorker:
publicWorker
HourlyWorker();
HourlyWorker(stringn,inta,chars,floatp):
Worker(n,a,s,p){}
voidCompute_pay(doublehours)
switch(k){
case1:
if(hours<
40)
zhouxin=10*hours;
else
zhouxin=10*40+1.5*10*(hours-40);
case2:
zhouxin=20*hours;
zhouxin=20*40+1.5*20*(hours-40);
case3:
zhouxin=40*hours;
zhouxin=40*40+1.5*40*(hours-40);
}
voiddisplay()
cout<
zhouxin:
zhouxin;
zhouixn:
friendostream&
operator<
output,HourWorker&
h);
private:
intk;
inthours;
floatzhouxin;
};
ostream&
output,HourlyWorker&
h)
output<
h.name<
h.age<
h.sex<
pay_per_hour<
returnoutput;
classSalariedWorker:
public:
SalariedWorker();
SalariedWorker(stringn,inta,chars,floatp):
voidCompute_pay(doublehours)
{
switch(k){
case4:
if(hours>
=35)
zhouxin=30*40;
else
zhouxin=30*hours+0.5*30*(35-hours);
case5:
35)
zhouxin=50*40;
zhouxin=50*hours+0.5*50*(35-hours);
}
voiddisplay()
switch(k)
{
friendostream&
output,SalariedWorker&
s);
private:
intk;
inthours;
floatzhouxin;
};
ostream&
s)
output<
s.name<
s.age<
s.sex<
s.pay_per_hour<
returnoutput;
intmain()
{
inti,j;
HourlyWorkera[3];
SalariedWorkerb[2];
for(i=1;
i<
=3;
i++)
cin>
>
a[i].name>
a[i].age>
a[i].sex>
a[i].pay_per_hour;
cout<
a[i].name<
a[i].age<
a[i].sex<
for(j=1;
j<
=2;
j++)
a[j].name>
a[j].age>
a[j].sex>
a[j].pay_per_hour;
a[j].name<
a[j].age<
a[j].sex<
printf("
[1]selectname1\n"
[2]selectname2\n"
printf("
[3]selectname3\n"
[4]selectname4\n"
[5]selectname5\n"
printf{"
Enterchoice:
scanf("
%d"
&
choice);
if(choice==0)break;
else
switch(choice)
{
case1:
pay_per_hour=10;
case2:
pay_per_hour=20;
case3:
pay_per_hour=40;
case4:
pay_per_hour=30;
case5:
pay_per_hour=50;
}
compute_pay(hours);
return0;
虚函数和纯虚函数有什么区别
首先,二者申明不一样。
virtualvoidtest(void);
//虚函数
virtualvoidtest(void)=0;
//纯虚函数
其次,如果一个类包含了一个纯虚函数(哪怕只有一个是纯虚函数),那么它就是一个抽象类——就是不能生成具体的对象!
但如果类中只包含虚函数,那么是可以定义具体的对象的!
但二者又有一个相同点:
都必须在子类中覆盖申明的虚函数!
而不管是虚还是纯虚!
纯虚函数就是只声明了有这种函数但不会给出这个函数的内容所以任何继承了这个函数的子类的成员函数都必须定义这个函数的内容
虚函数声明了有这种函数而且给除了这个函数的内容任何继承了这个函数的子类成员函数如果本身没有定义这个函数的内容就采用基类的这个函数如果子类重新定义了了这个函数那么通过基类的指针就能过根据对象来判断选择哪个函数
定了纯虚函数后,这个类就变成了虚基类,想继承他的类就必须要自己定义这个纯虚函数,不然这个类就可以定义对象,而虚函数不用。
纯虚函数就是没有函数体的,必须在派生类中重载的函数。
虚函数可以有函数体如果派生类中没有重载函数,则用父类的函数。
例:
P213
iostream.h>
classpoint
point(inti=0,intj=0){x0=i;
y0=j;
floatlength()const{return0.0;
virtualvoidset()=0;
virtualvoiddraw()=0;
protected: