C++补充作业.docx
- 文档编号:10044852
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:20
- 大小:19.85KB
C++补充作业.docx
《C++补充作业.docx》由会员分享,可在线阅读,更多相关《C++补充作业.docx(20页珍藏版)》请在冰点文库上搜索。
C++补充作业
第五章继承作业
1.定义一个基类Person,数据成员包含字符指针类型变量Name用于保存姓名,函数成员包括默认构造函数、带参构造函数用于初始化数据成员和输出姓名的成员函数PrintName()。
从Person类派生出Student类,增加长整型数据成员Number用于保存学号,函数成员包括带参构造函数用于初始化数据成员和输出学生信息的成员函数PrintInfo()。
要求:
在函数PrintInfo()中需要调用基类的成员函数PrintName()。
测试程序:
intmain()
{
Studentb("ssh",100);
();
}
运行结果:
NameofStudent:
ssh
NumberofStudent:
100
#include
#include
usingnamespacestd;
classPerson
{
Person(){};
Person(char*n)
{Name=n;}
voidPrintName();
private:
char*Name;
};
voidPerson:
:
PrintName()
{
cout<<"Nameofperson:
"< } classStudent: publicPerson { public: Student(char*m,inth): Person(n) { Number=m; } voidPrintInfor() { PrintName(); cout<<"Numberofstudent"< } private: intNumber: }; intmain() { Studentb("ssh",100); (); return0; } 2.编程体会包含内A嵌对象多继承派生类的带参构造函数和析构函数调用顺序。 声明三个基类Base1、Base2和Base3,然后从这三个基类按照公有方式派生出类Derived。 在三个基类中分别定义带一个整型参数的构造函数和析构函数输出提示信息,提示信息中需要包含整型参数的数值。 在派生类Derived中需要包含三个基类的内嵌对象,和相应的构造函数和析构函数用于输出提示信息,在构造函数中包含七个整型参量,其中六个用于初始化派生类和内嵌对象。 测试程序: intmain(){DerivedobjD(1,2,3,4,5,6,7);return0;} 运行结果: #include usingnamespacestd; classBase1 { public: Base1(intb) {cout<<"Base1constructorcalled"< ~Base1() {cout<<"Base1destrutorcalled"< }; classBase2 { public: Base2(intb) {cout<<"Base2constructorcalled"< ~Base2() {cout<<"Base2destrutorcalled"< }; classBase3 { public: Base3(intb) {cout<<"Base3constructorcalled"< ~Base3() {cout<<"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"< } ~Derived() { cout<<"Deriveddestructorcalled"< } private: Base2T; base1F; Base3R; }; 习题六 3、 (1) #include usingnamespacestd; classPoint { public: Point(inta,intb) { x=a; y=b; } ~Point(){ cout<<"execatingPointdestructor"< } voiddisplay() { cout<<"("< } private: intx; inty; }; classCircle: publicPoint { public: Circle(inta,intb,intr): Point(a,b),radius(r){} ~Circle(){cout<<"execatingCircledestructor"< voiddisplay() { display(); cout<<"radius="< } private: intradius; }; intmain() { Point*p=newCircle; Pointm(3,6); Point*k=&m; k->display(); Circlec(3,6,5); Point*pt=&c; pt->display(); deletep; return0; } 第六章作业题: 第一题: 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()。 #include #include usingnamespacestd; cladd__Med {public: virtualvoidprint(); virtualvoidid(); protected: stringtitle; }; classBook: publicMed { public: Book(); Book(stringau,stringpub,stringis,stringt): Med(t) { Author=au; Publisher=pub; isbn=is; title=t; } voidprint(); voidId(); private: stringAuthor; stringPublisher; stringisbn; }; voidBook: : print() { cout< "< "Publisher: "< } classCD: publicMed { public: CD(); CD(stringc,stringm,stringnum): Med(t) { composer=c; make=m; number=num; title=t; } voidprint(); voidId(); private: stringcomposer; stringnumber; stringmake; }; voidCD: : print() { cout< "< } voidCD: : id() { cout<<"make: "< cout<<"id: "< } classMag: publicMed { public: Mag(); Mag(stringt,stringi,stringpub,stringmag): Med(t) { issn=i; publisher=pub; title=t; Magzine=mag; } voidprint(); voidId(); private: stringissn; stringMagzine; stringpublisher; }; voidMag: : print() { cout< "< "Magzine: "< } voidMag: : Id() { cout<<"Id: "< }; intmain() { Bookbook("张三","C++语言程序设计","清华大学出版社","0-000-00000-1"); Magmag("辨析C/C++编程模式","0000-0000x","浙江大学出版社",""); showMedia(book); showMedia(mag); showMedia(cd); return0; } voidshowMedia(Med&p) { (); cout<<"\tId: "<<()< } 第二题: 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+×小时工资额×(实际工作时数–40)。 而计薪工周薪的计算方法是: 如果每周的实际工作时数不少于35小时,则按40小时计周薪(允许有半个工作日的事/病假),超出40小时部分不计薪,即周薪=小时工资额×40; 如果每周的实际工作时数少于35小时(不含35小时),则周薪=小时工资额实际工作时数+×小时工资额×(35-实际工作时数)。 要求: 1.定义Worker、HourlyWorker和SalariedWorker类,并实现它们的不同周薪计算方法。 2.在主函数main()中使用HourlyWorker和SalariedWorker类完成如下操作: ①通过控制台输入、输出操作顺序完成对5个不同工人的基本信息(姓名、年龄、性别、类别和薪金等级)的注册。 注意,5个工人应分属于两类工人的5个等级。 ②通过一个菜单结构实现在5个工人中可以任意选择一个工人,显示该工人的基本信息,根据每周的实际工作时数(通过控制台输入)计算并显示该工人的周薪。 #include #include<> #include usingnamespacestd; classWorker { public: 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;break; case3: name=name3;break; case4: name=name4;break; case4: name=name4;break; case5: name=name5;break; } virtualvoidCompute_pay(doublehours)=0; virtualfriendostream&operator<<(ostream&out,Worker&Worker); protected: stringname; intage; charsex; intchoice; floatpay_per_hour; }; ostream&operator<<(ostream&output,Worker&w) { output<<<<","<<<<","<<<<","<<< returnoutput; } classHourlyWorker: publicWorker { public: 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+*10*(hours-40); case2: if(hours<40) zhouxin=20*hours; else zhouxin=20*40+*20*(hours-40); case3: if(hours<40) zhouxin=40*hours; else zhouxin=40*40+*40*(hours-40); } voiddisplay() { switch(k){ case1: cout<<"zhouxin: "< case2: cout<<"zhouxin: "< case3: cout<<"zhouixn: "< } } friendostream&operator<<(ostream&output,HourWorker&h); private: intk; inthours; floatzhouxin; }; ostream&operator<<(ostream&output,HourlyWorker&h) { output<<<<","<<<<","<<<<","< returnoutput; } classSalariedWorker: publicWorker { public: SalariedWorker(); SalariedWorker(stringn,inta,chars,floatp): Worker(n,a,s,p){} voidCompute_pay(doublehours) { switch(k){ case4: if(hours>=35) zhouxin=30*40; else zhouxin=30*hours+*30*(35-hours); case5: if(hours<35) zhouxin=50*40; else zhouxin=50*hours+*50*(35-hours); } voiddisplay() { switch(k) { case4: cout<<"zhouxin: "< case5: cout<<"zhouxin: "< } friendostream&operator<<(ostream&output,SalariedWorker&s); private: intk; inthours; floatzhouxin; }; ostream&operator<<(ostream&output,SalariedWorker&s) { output<,<<","<<<<","<<<<","<<<<","< 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; } for(i=1;i<=3;i++) {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 补充 作业