第10章类与对象.ppt
《第10章类与对象.ppt》由会员分享,可在线阅读,更多相关《第10章类与对象.ppt(63页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第十章第十章 继承性与派生类继承性与派生类 C C 语言程序设计案例教程语言程序设计案例教程1案例一案例一 雇员类设计雇员类设计 1.1.问题描述问题描述设计一个雇员类,包括基础员工、销售员工、经理以及销设计一个雇员类,包括基础员工、销售员工、经理以及销设计一个雇员类,包括基础员工、销售员工、经理以及销设计一个雇员类,包括基础员工、销售员工、经理以及销售经理;基础员工每月有基本工资和等级,等级上升则售经理;基础员工每月有基本工资和等级,等级上升则售经理;基础员工每月有基本工资和等级,等级上升则售经理;基础员工每月有基本工资和等级,等级上升则基本工资提升;销售员工除了基本工资以及等级和基础基本工
2、资提升;销售员工除了基本工资以及等级和基础基本工资提升;销售员工除了基本工资以及等级和基础基本工资提升;销售员工除了基本工资以及等级和基础员工一致外,还有销售业绩工资为销售额的员工一致外,还有销售业绩工资为销售额的员工一致外,还有销售业绩工资为销售额的员工一致外,还有销售业绩工资为销售额的10%10%;经理;经理;经理;经理除了基本工资以及等级和基础员工一致外,还有每月固除了基本工资以及等级和基础员工一致外,还有每月固除了基本工资以及等级和基础员工一致外,还有每月固除了基本工资以及等级和基础员工一致外,还有每月固定的管理基本工资;销售经理除了基本工资以及等级和定的管理基本工资;销售经理除了基本
3、工资以及等级和定的管理基本工资;销售经理除了基本工资以及等级和定的管理基本工资;销售经理除了基本工资以及等级和基础员工一致外,还有销售业绩工资为销售额的基础员工一致外,还有销售业绩工资为销售额的基础员工一致外,还有销售业绩工资为销售额的基础员工一致外,还有销售业绩工资为销售额的10%10%和和和和每月固定的管理基本工资。每月固定的管理基本工资。每月固定的管理基本工资。每月固定的管理基本工资。2.2.问题分析问题分析注意掌握本例中虚基类的声明方法、虚基类的意义、派生注意掌握本例中虚基类的声明方法、虚基类的意义、派生注意掌握本例中虚基类的声明方法、虚基类的意义、派生注意掌握本例中虚基类的声明方法、
4、虚基类的意义、派生类对虚基类中同名函数的覆盖;注意输出时显示的多重类对虚基类中同名函数的覆盖;注意输出时显示的多重类对虚基类中同名函数的覆盖;注意输出时显示的多重类对虚基类中同名函数的覆盖;注意输出时显示的多重派生情况下的虚基类和派生类构造函数以及析构函数调派生情况下的虚基类和派生类构造函数以及析构函数调派生情况下的虚基类和派生类构造函数以及析构函数调派生情况下的虚基类和派生类构造函数以及析构函数调用次序。用次序。用次序。用次序。23.C+3.C+代码代码#include#include#include#include#include#include class employee/class
5、employee/虚基类虚基类虚基类虚基类protected:protected:char name20;char name20;intint idnumidnum;intint grade;grade;float salary;float salary;static static intint totalnumtotalnum;public:public:employee(charemployee(char*name=);*name=);employee();employee();char*char*getnamegetname()return name;()return name;inli
6、ne inline intint getgradegetgrade()return grade;()return grade;float inline float inline getsalarygetsalary()return salary;()return salary;inline void inline void promote(intpromote(int g)gradeg)grade=g;=g;void void getpay(chargetpay(char*name=);*name=);void display();void display();3inline inline e
7、mployee:employee(charemployee:employee(char*name)*name)totalnumtotalnum+;+;strcpy(thisstrcpy(this-name,name);-name,name);idnumidnum=totalnumtotalnum;grade=0;grade=0;salary=3000;salary=3000;coutcoutnamename基础员工已经聘任基础员工已经聘任基础员工已经聘任基础员工已经聘任endlendl;inline inline employee:employeeemployee:employee()()co
8、utcoutnamename基础员工已经离职基础员工已经离职基础员工已经离职基础员工已经离职name,name);-name,name);salary=salary=salary+gradesalary+grade*1000;*1000;coutcout员工信息已经重新设置员工信息已经重新设置员工信息已经重新设置员工信息已经重新设置endlendl;void void employee:displayemployee:display()()cout.setf(ios:leftcout.setf(ios:left););coutcoutsetw(10)setw(10)姓名姓名姓名姓名setw(1
9、0)setw(10)编号编号编号编号setw(10)setw(10)级别级别级别级别setw(10)setw(10)工资工资工资工资endlendl;coutcoutsetw(10)namesetw(10)setw(10)namesetw(10)idnumidnumsetw(10)gradesetw(10)salarysetw(10)gradesetw(10)salarysales=0;this-sales=0;coutcoutnamename销售员工已经聘任销售员工已经聘任销售员工已经聘任销售员工已经聘任endlendl;inline inline salesperson:salespers
10、onsalesperson:salesperson()()coutcoutnamename销售员工已经离职销售员工已经离职销售员工已经离职销售员工已经离职name,name);-name,name);this-sales=this-sales=salessales;salary=salary=salary+gradesalary+grade*1000+sales*0.1;*1000+sales*0.1;coutcout销售员工信息已经重新设置销售员工信息已经重新设置销售员工信息已经重新设置销售员工信息已经重新设置endlendl;class class manager:virtualmanag
11、er:virtual public employee public employee/派生类派生类派生类派生类managermanager,单一继承,单一继承,单一继承,单一继承employeeemployee,虚基类,虚基类,虚基类,虚基类protected:protected:float float monsalarymonsalary;/;/固定月薪固定月薪固定月薪固定月薪public:public:manager();manager();manager();manager();void void getpay(chargetpay(char*name=);*name=);5inline
12、 inline manager:managermanager:manager()()monsalarymonsalary=5000;=5000;coutcoutnamename经理已经聘任经理已经聘任经理已经聘任经理已经聘任endlendl;inline inline manager:managermanager:manager()()coutcoutnamename经理已经离职经理已经离职经理已经离职经理已经离职name,name);-name,name);salary=salary=salary+monsalary+gradesalary+monsalary+grade*1000;*100
13、0;coutcout经理信息已经重新设置经理信息已经重新设置经理信息已经重新设置经理信息已经重新设置endlendl;class class salesmanagersalesmanager:public salesperson,public manager:public salesperson,public manager/多重继承,虚基类多重继承,虚基类多重继承,虚基类多重继承,虚基类public:public:salesmanagersalesmanager();();salesmanagersalesmanager();();void void getpay(chargetpay(ch
14、ar*name=,float sales=0);*name=,float sales=0);inline inline salesmanager:salesmanagersalesmanager:salesmanager()()salary=8000;salary=8000;coutcoutnamename销售经理已经聘任销售经理已经聘任销售经理已经聘任销售经理已经聘任endlendl;inline inline salesmanager:salesmanagersalesmanager:salesmanager()()coutcoutnamename销售经理已经离职销售经理已经离职销售经理已
15、经离职销售经理已经离职name,name);-name,name);salary=salary=salary+monsalary+gradesalary+monsalary+grade*1000+sales*0.1;*1000+sales*0.1;coutcout销售经理信息已经重新设置销售经理信息已经重新设置销售经理信息已经重新设置销售经理信息已经重新设置endlendl;6void main()void main()char name20;int char name20;int grade;floatgrade;float sales;sales;employee A;employee A
16、;salesperson B;salesperson B;manager C;manager C;salesmanagersalesmanager D;/D;/注意输出时显示的多重派生情况下的虚基类和派生类构造函数和析构注意输出时显示的多重派生情况下的虚基类和派生类构造函数和析构注意输出时显示的多重派生情况下的虚基类和派生类构造函数和析构注意输出时显示的多重派生情况下的虚基类和派生类构造函数和析构 函数调用次序函数调用次序函数调用次序函数调用次序 coutcoutname;name;coutcout请输入请输入请输入请输入namenamegrade;grade;A.promote(gradeA
17、.promote(grade););A.getpay(name);A.displayA.getpay(name);A.display();();coutcoutname;name;coutcout请输入请输入请输入请输入namenamegrade;grade;coutcout请输入请输入请输入请输入namenamesales;sales;B.promote(gradeB.promote(grade););B.getpay(nameB.getpay(name,sales);B.displaysales);B.display();();coutcoutname;name;coutcout请输入请输
18、入请输入请输入namenamegrade;grade;C.promote(gradeC.promote(grade););C.getpay(name);C.displayC.getpay(name);C.display();();coutcoutname;name;coutcout请输入请输入请输入请输入namenamegrade;grade;coutcout请输入请输入请输入请输入namenamesales;sales;D.promote(gradeD.promote(grade););D.getpay(nameD.getpay(name,sales);D.displaysales);D.d
19、isplay();();74.4.运行结果运行结果基础员工已经聘任基础员工已经聘任基础员工已经聘任基础员工已经聘任基础员工已经聘任基础员工已经聘任基础员工已经聘任基础员工已经聘任销售员工已经聘任销售员工已经聘任销售员工已经聘任销售员工已经聘任基础员工已经聘任基础员工已经聘任基础员工已经聘任基础员工已经聘任经理已经聘任经理已经聘任经理已经聘任经理已经聘任基础员工已经聘任基础员工已经聘任基础员工已经聘任基础员工已经聘任销售员工已经聘任销售员工已经聘任销售员工已经聘任销售员工已经聘任经理已经聘任经理已经聘任经理已经聘任经理已经聘任销售经理已经聘任销售经理已经聘任销售经理已经聘任销售经理已经聘任请输入
20、员工的姓名请输入员工的姓名请输入员工的姓名请输入员工的姓名:zhangzhang请输入请输入请输入请输入zhangzhang的提升级别的提升级别的提升级别的提升级别:2:2员工信息已经重新设置员工信息已经重新设置员工信息已经重新设置员工信息已经重新设置姓名姓名姓名姓名 编号编号编号编号 级别级别级别级别 工资工资工资工资zhangzhang 1001 2 5000 1001 2 5000请输入销售员工的姓名请输入销售员工的姓名请输入销售员工的姓名请输入销售员工的姓名:wangwang请输入请输入请输入请输入wangwang的提升级别的提升级别的提升级别的提升级别:3:3请输入请输入请输入请输入
21、wangwang的销售业绩的销售业绩的销售业绩的销售业绩:80000:80000销售员工信息已经重新设置销售员工信息已经重新设置销售员工信息已经重新设置销售员工信息已经重新设置姓名姓名姓名姓名 编号编号编号编号 级别级别级别级别 工资工资工资工资wangwang 1002 3 14000 1002 3 14000请输入经理的姓名请输入经理的姓名请输入经理的姓名请输入经理的姓名:li li请输入请输入请输入请输入li li的提升级别的提升级别的提升级别的提升级别:4:4经理信息已经重新设置经理信息已经重新设置经理信息已经重新设置经理信息已经重新设置姓名姓名姓名姓名 编号编号编号编号 级别级别级别
22、级别 工资工资工资工资li li 1003 4 12000 1003 4 12000请输入销售经理的姓名请输入销售经理的姓名请输入销售经理的姓名请输入销售经理的姓名:zhaozhao请输入请输入请输入请输入zhaozhao的提升级别的提升级别的提升级别的提升级别:4:4请输入请输入请输入请输入zhaozhao的销售业绩的销售业绩的销售业绩的销售业绩:96000:96000销售经理信息已经重新设置销售经理信息已经重新设置销售经理信息已经重新设置销售经理信息已经重新设置姓名姓名姓名姓名 编号编号编号编号 级别级别级别级别 工资工资工资工资zhaozhao 1004 4 26600 1004 4 2
23、6600zhaozhao销售经理已经离职销售经理已经离职销售经理已经离职销售经理已经离职zhaozhao经理已经离职经理已经离职经理已经离职经理已经离职zhaozhao销售员工已经离职销售员工已经离职销售员工已经离职销售员工已经离职zhaozhao基础员工已经离职基础员工已经离职基础员工已经离职基础员工已经离职li li经理已经离职经理已经离职经理已经离职经理已经离职li li基础员工已经离职基础员工已经离职基础员工已经离职基础员工已经离职wangwang销售员工已经离职销售员工已经离职销售员工已经离职销售员工已经离职wangwang基础员工已经离职基础员工已经离职基础员工已经离职基础员工已经
24、离职zhangzhang基础员工已经离职基础员工已经离职基础员工已经离职基础员工已经离职8上一章我们学习了类,类是进行面向对象程上一章我们学习了类,类是进行面向对象程序设计的基础。它能够定义数据和对数据序设计的基础。它能够定义数据和对数据的操作,并通过不同的访问权限,将类的的操作,并通过不同的访问权限,将类的接口和内部实现分开,支持信息的封装和接口和内部实现分开,支持信息的封装和隐藏。本章中,我们将介绍继承的用法。隐藏。本章中,我们将介绍继承的用法。代码复用是代码复用是C+最重要的性能之一,它是通最重要的性能之一,它是通过类继承机制来实现的。通过类继承,我过类继承机制来实现的。通过类继承,我们
25、可以复用基类的代码,并可以在继承类们可以复用基类的代码,并可以在继承类中增加新代码或者覆盖基类的成员函数,中增加新代码或者覆盖基类的成员函数,为基类成员函数赋予新的意义,实现最大为基类成员函数赋予新的意义,实现最大限度的代码复用。限度的代码复用。910.1 类的继承与派生10.1.1 继承与派生的概念现实世界中的许多事物是具有继承性的。人现实世界中的许多事物是具有继承性的。人们一般用层次分类的方法来描述它们的关们一般用层次分类的方法来描述它们的关系。如图系。如图10.1是一个简单的交通工具分类是一个简单的交通工具分类图。图。10图10.1 简单的交通工具分类图11在这个图中建立了一个层次结构,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10 对象
限制150内