已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章 继承作业1定义一个基类Person,数据成员包含字符指针类型变量Name用于保存姓名,函数成员包括默认构造函数、带参构造函数用于初始化数据成员和输出姓名的成员函数PrintName()。从Person类派生出Student类,增加长整型数据成员Number用于保存学号,函数成员包括带参构造函数用于初始化数据成员和输出学生信息的成员函数PrintInfo()。要求:在函数PrintInfo()中需要调用基类的成员函数PrintName()。测试程序:int main() Student b(ssh,100); b.PrintInfo();运行结果:Name of Student: sshNumber of Student: 100#include#includeusing namespace std;class PersonPerson();Person(char *n)Name=n;void PrintName();private:char *Name;void Person:PrintName()coutName of person:Nameendl;class Student:public Personpublic:Student(char *m,int h):Person(n)Number=m;void PrintInfor()PrintName();coutNumber of studentendl;private:int Number:;int main() Student b(ssh,100); b.PrintInfo(); return 0;2编程体会包含内A嵌对象多继承派生类的带参构造函数和析构函数调用顺序。声明三个基类Base1、Base2和Base3,然后从这三个基类按照公有方式派生出类Derived。在三个基类中分别定义带一个整型参数的构造函数和析构函数输出提示信息,提示信息中需要包含整型参数的数值。在派生类Derived中需要包含三个基类的内嵌对象,和相应的构造函数和析构函数用于输出提示信息,在构造函数中包含七个整型参量,其中六个用于初始化派生类和内嵌对象。测试程序:int main()Derived objD(1,2,3,4,5,6,7);return 0; 运行结果:#include using namespace std;class Base1public:Base1(int b)coutBase 1 constructor called bendl;Base 1()coutBase 1 destrutor calledendl;class Base2public:Base2(int b)coutBase 2 constructor called bendl;Base 2()coutBase 2 destrutor calledendl;class Base3public:Base3(int b)coutBase 3 constructor called bendl;Base 3()coutBase 3 destrutor calledendl;class Derived:public Base3,public Base1,public Base2public:Derived(int a,int b,int c,int d,int e,int f,int g):T(int c),F(int b),R(int d),Base3(int g),Base1(int e),Base2(int f)coutDerived constructor calledaendl;Derived()coutDerived destructor calledendl;private:Base2 T;base1 F;Base3 R;习题六3、(1)#includeusing namespace std;class Point public:Point(int a,int b)x=a;y=b;Point()coutexecating Point destructorendl;void display()cout(x,y)endl;private:int x;int y;class Circle:public Pointpublic:Circle(int a,int b,int r):Point(a,b),radius(r)Circle()coutexecating Circle destructorendl;void display()display();coutradius=radiusdisplay();Circle c(3,6,5);Point *pt=&c;pt-display();delete p;return 0;第六章作业题:第一题: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#includeusing namespace std;cladd _Medpublic:virtualvoid print();virtual void id();protected:string title;class Book:public Medpublic:Book();Book(string au,string pub,string is,string t):Med(t)Author=au;Publisher=pub;isbn=is;title=t;void print();void Id();private:string Author;string Publisher;string isbn;void Book:print()couttitle,Author:Author,Publisher:Publisherendl;class CD:public Medpublic:CD();CD(string c,string m,string num):Med(t)composer=c;make=m;number=num;title=t;void print();void Id();private:string composer;string number;string make;void CD:print()couttitle,CD composer:composerendl;void CD:id()coutmake:makeendl;coutid:numberendl;class Mag:public Medpublic:Mag();Mag(string t,string i,string pub,string mag):Med(t)issn=i;publisher=pub;title=t;Magzine=mag;void print();void Id();private:string issn;string Magzine;string publisher;void Mag:print()couttitle,Publisher:publisher,Magzine:Magzineendl;void Mag:Id()coutId:issnendl;int main()Book book(张三,C+语言程序设计,清华大学出版社,0-000-00000-1);Mag mag(辨析C/C+编程模式,0000-0000x,浙江大学出版社,vol.16);showMedia(book);showMedia(mag);showMedia(cd);return 0;void showMedia(Med &p)p.print();coutt Id:p.Id()endl;第二题:2 设计一个抽象基类Worker,并从该基类中派生出计时工人类HourlyWorker和计薪工人类SalariedWorker。每名工人都具有姓名name、年龄age、性别sex和小时工资额pay_per_hour等属性;周薪计算成员函数void Compute_pay(double hours),(其中参数hours为每周的实际工作时数)和用于显示工人的基本信息的标准输出运算符友元函数ostream& operator(ostream& out, Worker& worker)。工人的薪金等级以小时工资额划分:计时工人的薪金等级分为10、20和40 US$/hour三个等级;计薪工人的薪金等级,分为30和50 US$/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个工人中可以任意选择一个工人,显示该工人的基本信息,根据每周的实际工作时数(通过控制台输入)计算并显示该工人的周薪。#include#include#includeusing namespace std;class Workerpublic:Worker();Worker(string n,int a,char s,float p)name=n;age=a;sex=s;pay_per_hour=p;void Name()swith(choice) case 1:name=name1;break; case 2:name=name2;break; case 3:name=name3;break; case 4:name=name4;break; case 4:name=name4;break; case 5:name=name5;break;virtual void Compute_pay(double hours)=0;virtual friend ostream& operator (ostream& out,Worker& Worker);protected:string name;int age;char sex;int choice;float pay_per_hour;ostream& operator(ostream& output,Worker&w),w.age,w.sex,w.pay_per_hourendl;return output;class HourlyWorker:public Workerpublic:HourlyWorker();HourlyWorker(string n,int a,char s,float p):Worker(n,a,s,p)void Compute_pay(double hours)switch(k)case 1:if(hours40) zhouxin=10*hours; else zhouxin=10*40+1.5*10*(hours-40);case 2:if(hours40) zhouxin=20*hours; else zhouxin=20*40+1.5*20*(hours-40);case 3:if(hours40) zhouxin=40*hours; else zhouxin=40*40+1.5*40*(hours-40);void display()switch(k)case 1:coutzhouxin:zhouxin;case 2:coutzhouxin:zhouxin;case 3:coutzhouixn:zhouxin;friend ostream&operator(ostream& output,HourWorker& h);private:int k;int hours;float zhouxin;ostream&operator(ostream& output,HourlyWorker& h),h.age,h.sex,pay_per_hour,=35) zhouxin=30*40;else zhouxin=30*hours+0.5*30*(35-hours);case 5:if(hours35) zhouxin=50*40;else zhouxin=50*hours+0.5*50*(35-hours);void display()switch(k) case 4: coutzhouxin:zhouxin; case 5: coutzhouxin:zhouxin;friend ostream&operator(ostream& output,SalariedWorker& s);private:int k;int hours;float zhouxin;ostream&operator(ostream& output,SalariedWorker& s)output,,s.age,s.sex,s.pay_per_hour,zhouxin;return output;int main() int i,j;HourlyWorker a3;SalariedWorker b2;for(i=1;,ai.age,ai.sexai.pay_per_hour;for(i=1;i=3;i+),ai.age,ai.sexai.pay_per_hour;for(j=1;,aj.age,aj.sexaj.pay_per_hour;for(j=1;j=2;j+),aj.age,aj.sexaj.pay_per_hour;for(i=1;i=3;i+)printf(1 select name1n);printf(2 select name2n); printf(3 select name3n);printf(4 select name4n);printf(5 select name5n);printfEnter choice:);scanf(%d,&choice);if(choice=0) break;elseswitch(choice) case 1:pay_per_hour=10;break;case 2:pay_per_hour=20;break;case 3:pay_per_hour=40;break;case 4:pay_per_hour=30;break;case 5:pay_per_hour=50;break;coutzhouxin:compute_pay(hours);return 0;虚函数和纯虚函数有什么区别首先,二者申明不一样。virtual void test(void);/虚函数 virtual void test(void) = 0;/纯虚函数其次,如果一个类包含了一个纯虚函数(哪怕只有一个是纯虚函数),那么它就是一个抽象类就是不能生成具体的对象!但如果类中只包含虚函数,那么是可以定义具体的对象的!但二者又有一个相同点:都必须在子类中覆盖申明的虚函数!而不管是虚还是纯虚!纯虚函数就是只声明了有这种函数 但不会给出这个函数的内容 所以任何继承了这个函数的子类的成员函数都必须定义这个函数的内容虚函数声明了有这种函数 而且给除了这个函数的内容 任何继承了这个函数的子类成员函数 如果本身没有定义这个函数的内容 就采用基类的这个函数 如果子类重新定义了了这个函数 那么通过基类的指针就能过根据对象来判断选择哪个函数定了纯虚函数后,这个类就变成了虚基类 ,想继承他的类就必须要自己定义这个纯虚函数,不然这个类就可以定义对象,而虚函数不用。纯虚函数就是没有函数体的,必须在派生类中重载的函数。虚函数可以有函数体如果派生类中没有重载函数,则用父类的函数。例:P213#include class point public: point(int i=0, int j=0) x0=i; y0=j; float length() const return 0.0; virtual void set() = 0; virtual void draw() = 0; protected: int x0, y0; ;class line : public point public: line(int i=0, int j=0, int m=0, int n=0):point(i, j) x1=m; y1=n; float length() constreturn length; void set() coutline:set() called.n; void draw() coutline:draw() called.n; protected: int x1, y1; ; cla
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高压水射流清洗工岗中全能考核试卷含答案
- 木地板坯料制备工跨领域知识水平考核试卷含答案
- 纺丝原液制备工岗位进度管理考核试卷含答案
- 2026年轨道交通智能化高级专家招聘笔试试卷 招录14人
- 2026年湖北省武穴市高三数学下册期末考试模拟考试卷(突破训练)附答案
- 2026年河北省迁安市高三数学下册期末考试模拟检测卷含完整答案(各地真题)
- 2026年吉林省扶余市高三数学下册期末考试模拟检测卷(精练)附答案
- 2026年山东省平度市高三数学下册期末考试模拟检测卷1套附答案
- 2026年广东省普宁市高三数学下册期末考试模拟检测卷附参考答案【典型题】
- 2026年江西省丰城市高三数学下册期末考试模拟测试卷及参考答案【达标题】
- 自考03450公共部门人力资源管理 重点精简版
- 2026年第三季度典型事故案例警示教育
- 第一次月考试卷(1~2单元)(含答案)-2026-2027学年人教版数学三年级上册
- 《人工智能技术与应用》课件 项目9 人工智能训练
- 2026年新疆事业单位招聘统考真题(全科目含答案解析)
- 安全风险辨识评估作业指导书
- 综合与实践 周长与面积的变化 课件(共21张) 苏教版数学四年级上册
- 2025-2026学年九年级上学期期中考试化学试题(含答案)
- 2026年中考生物一轮复习:人教版(2024)七八年级4册必背知识点提纲
- 2026年公开遴选公务员考试(计算机知识)经典试题及答案
- 2026年科研伦理与学术规范期末考试题库含完整答案详解(网校专用)
评论
0/150
提交评论