ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:17.74KB ,
资源ID:10329738      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10329738.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(例题继承与多态.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

例题继承与多态.docx

1、例题继承与多态例1:继承中的构造函数#include class B1 /基类B1,构造函数有参数public: B1(int i) coutconstructing B1 iendl;class B2 /基类B2,构造函数有参数public: B2(int j) coutconstructing B2 jendl;class B3 /基类B3,构造函数无参数public: B3()coutconstructing B3 *endl;class C: public B2, public B1, public B3 /派生新类C/注意基类名的顺序public: /派生类的公有成员 C(int a

2、, int b, int c, int d):B1(a),memberB2(d),memberB1(c),B2(b) /注意基类名的个数与顺序 /注意成员对象名的个数与顺序private: /派生类的私有对象成员 B1 memberB1; B2 memberB2; B3 memberB3;void main() C obj(1,2,3,4);输出结果:constructing B2 2constructing B1 1constructing B3 *constructing B1 3constructing B2 4constructing B3 *Press any key to cont

3、inue例:21虚基类#include using namespace std;class B0 /声明基类B0 int nV; public: /外部接口 B0(int n) nV=n; void fun()coutMember of B0:nV=nVendl;class B1: public B0 / virtual int nV1; public: B1(int a,int b) : B0(a) nV1=b; void fun() B0:fun();coutMember of B1:nV1=nV1endl; ;class B2: public B0 /virtual int nV2; p

4、ublic: B2(int a,int b) : B0(a) nV2=b; void fun() B0:fun();coutMember of B2:nV2=nV2endl; ;class D1: public B1, public B2int nVd;public: D1(int a,int b,int c,int d) : B1(a,b), B2(b,c)nVd=d;/B0(a), void fund()coutMember of D1:nVd=nVdendl;int main() D1 d1(1,2,3,4); d1.fund(); d1.B1:fun(); d1.B2:fun(); /

5、d1.B0:fun(); return 0;无虚基类Member of D1:nVd=4Member of B0:nV=1Member of B1:nV1=2Member of B0:nV=2Member of B2:nV2=3Press any key to continue有虚基类:Member of D1:nVd=4Member of B0:nV=1Member of B1:nV1=2Member of B0:nV=1Member of B2:nV2=3Member of B0:nV=1Press any key to continue例22:虚基类#include #include c

6、lass personpublic: person(int n, char* strname, char s, char* strfrom) coutendlperson constructorendl; id = n; strcpy(name, strname); sex = s; strcpy(from, strfrom); void showinfo() coutendlID: id endlname: name endlsex: sex endlfrom: from; protected: int id; char name10; char sex; char from20;class

7、 undergraduate :virtual public person / 虚继承public: undergraduate(int n, char* strname, char s, char* strfrom, float sc) :person(n, strname, s, strfrom) coutendlundergraduate constructorendl; score = sc; void showinfo() person:showinfo(); coutendlscore: score; protected: float score;class teacher :vi

8、rtual public person / 虚继承public: teacher(int n, char* strname, char s, char* strfrom, float sa) :person(n, strname, s, strfrom) salary = sa; coutendlteacher constructorendl; void showinfo() person:showinfo(); coutendlsalary: salary; protected: float salary;class graduate :public undergraduate, publi

9、c teacher / 从两个类继承public: graduate(int n, char* strname, char s, char* strfrom, float sc, float sa) :person(n, strname, s, strfrom),undergraduate(2,jetty,M,china,90), teacher(3, rose, F, American, 2000) /*id = n; strcpy(name, strname); sex = s; strcpy(from, strfrom); score = sc; salary = sa;*/ void

10、showinfo() coutendlID: id endlname: name endlsex: sex endlfrom: from endlscore: score endlsalary: salary; ;void main() graduate g(1, jetty, M, china,95,3000); g.showinfo();输出结果:person constructorundergraduate constructorteacher constructorID: 1name: jettysex: Mfrom: chinascore: 90salary: 2000Press a

11、ny key to continue例3:多态性31:#include class Base /基类声明 int i;public: /外部接口 Base(int i1) i=i1; /virtual void print()couti=iendl; /虚成员函数;class D: public Base /公有派生 char ch;public: D(char c1,int c2) : Base(c2) ch=c1;/virtual void print()Base:print(); couti=iprint(); /i=100 i=100 ch=A3-2:#include class B0

12、 /基类B0声明public: /外部接口 /virtual void display()coutB0:display()endl; /虚成员函数;class B1: public B0 /公有派生public: void display()coutB1:display()endl; /虚成员函数;class D1: public B1 /公有派生public: void display()coutD1:display()display();void main() /主函数 B0 b0,*p; /定义基类对象和指针 B1 b1; /定义派生类对象 D1 d1; /定义派生类对象 p=&b0;

13、fun(p); /调用基类B0函数成员 p=&b1; fun(p); /调用派生类B1函数成员 p=&d1; fun(p); /调用派生类D1函数成员输出结果:B0:display()B0:display()B0:display()Press any key to continue加上虚函数结果:B0:display()B1:display()D1:display()例4:实例公司人员管理/employee.hclass employeeprotected: char *name; /姓名 int individualEmpNo; /个人编号 int grade; /级别 float accu

14、mPay; /月薪总额 static int employeeNo; /本公司职员编号目前最大值public: employee(); /构造函数 employee(); /析构函数 virtual void pay()=0; /计算月薪函数(纯虚函数) virtual void promote(int increment=0); /升级函数(虚函数) virtual void displayStatus()=0; /显示人员信息(纯虚函数);class technician :public employee /兼职技术人员类private: float hourlyRate; /每小时酬金

15、int workHours; /当月工作时数public: technician(); /构造函数 void promote(int); /升级函数 void pay(); /计算月薪函数 void displayStatus(); /显示人员信息;class salesman :virtual public employee /兼职推销员类protected: float CommRate; /按销售额提取酬金的百分比 float sales; /当月销售额public: salesman(); /构造函数 void promote(int); /升级函数 void pay(); /计算月薪

16、函数 void displayStatus(); /显示人员信息;class manager :virtual public employee /经理类protected: float monthlyPay; /固定月薪数public: manager(); /构造函数 void promote(int); /升级函数 void pay(); /计算月薪函数 void displayStatus(); /显示人员信息;class salesmanager :public manager, public salesman /销售经理类public: salesmanager(); /构造函数 v

17、oid promote(int); /升级函数 void pay(); /计算月薪函数 void displayStatus(); /显示人员信息;/empfunc.cpp#include#include#includeemployee.hint employee:employeeNo=1000; /员工编号基数为1000employee:employee() char namestr50; /输入雇员姓名时首先临时存放在namestr中 coutnamestr; name=new charstrlen(namestr)+1; /动态申请用于存放姓名的内存空间 strcpy(name,name

18、str); /将临时存放的姓名复制到name individualEmpNo=employeeNo+; /新输入的员工,其编号为目前最大编号加1 grade=1; /级别初值为1 accumPay=0.0; /月薪总额初值为0employee:employee() delete name; /在析构函数中删除为存放姓名动态分配的内存空间void employee:promote(int increment) grade+=increment; /升级,提升的级数由increment指定technician:technician() hourlyRate=100; /每小时酬金100元void

19、technician:promote(int) employee:promote(2); /调用基类的升级函数,升2级void technician:pay() cout请输入nameworkHours; accumPay=hourlyRate*workHours; /计算月薪,按小时计酬 cout兼职技术人员name编号individualEmpNo 本月工资accumPayendl;void technician:displayStatus() cout兼职技术人员name编号individualEmpNo 级别为grade级,已付本月工资accumPayendl;salesman:sal

20、esman() CommRate=0.04; /销售提成比例4%void salesman:promote(int) employee:promote(0); /调用基类的升级函数,升0级void salesman:pay() cout请输入namesales; accumPay=sales*CommRate; /月薪=销售提成 cout推销员name编号individualEmpNo 本月工资accumPayendl;void salesman:displayStatus() cout推销员name编号individualEmpNo 级别为grade级,已付本月工资accumPayendl;

21、manager:manager() monthlyPay=8000; /固定月薪8000元void manager:promote(int) employee:promote(3); /调用基类的升级函数,升3级void manager:pay() accumPay=monthlyPay; /月薪总额即固定月薪数 cout经理name编号individualEmpNo 本月工资accumPayendl;void manager:displayStatus() cout经理name编号individualEmpNo 级别为grade级,已付本月工资accumPayendl;salesmanage

22、r:salesmanager() monthlyPay=5000; CommRate=0.005;void salesmanager:promote(int) employee:promote(2); /调用基类的升级函数,升2级void salesmanager:pay() cout请输入employee:namesales; accumPay=monthlyPay+CommRate*sales; /月薪=固定月薪+销售提成 cout销售经理name编号individualEmpNo 本月工资accumPayendl;void salesmanager:displayStatus() cout销售经理name编号individualEmpNo 级别为grade级,已付本月工资accumPayendl;/8_7.cpp#include#includeemployee.hint main() manager m1; technician t1; salesmanager sm1; salesman s1; employee *emp4=&m1,&t1,&sm1,&s1; /用指针数组的个元素存放各对象的地址 int i; for(i=0;ipromote(); empi-pay(); empi-displayStatus(); return 0;

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

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