第--章━━多态性与虚函数优秀文档.ppt
上传人:天马****23 上传时间:2024-09-10 格式:PPT 页数:36 大小:199KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

第--章━━多态性与虚函数优秀文档.ppt

第--章━━多态性与虚函数优秀文档.ppt

预览

免费试读已结束,剩余 26 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

C++程序设计主要内容C++的多态性动态多态性的实现条件虚函数的声明虚函数的特性与调用虚函数的特性与调用【例】(派生类对象中一般成员函数的调用──方法㈠:可通过派生类对象的对象名、对象指针、对象引用来调用!注意调用过程。)#include<iostream.h>classA{intx;public:A(inta){x=a;}voidg(){cout<<“A::x=”<<x<<endl;}};classB:publicA{inty;public:B(inta,intb):A(a){y=b;}voidf(){cout<<“B::y=”<<y<<endl;}};classC:publicB{intm;public:C(inta,intb,intc):B(a,b){m=c;}voidg(){cout<<“C::m=”<<m<<endl;}};classD:publicC{intn;public:D(inta,intb,intc,intd):C(a,b,c){n=d;}voidf(){cout<<“D::n=”<<n<<endl;}};voidmain(){Dd1(1,2,3,4);d1.f();d1.g();D*pd=&d1;pd->f();pd->g();D&dd1=d1;dd1.f();dd1.g();}【例】(派生类对象中虚函数的调用──方法㈠:可通过派生类对象的对象名、对象指针、对象引用来调用!注意调用过程与一般成员函数相同!由此可见,这种调用方式无法体现虚函数的特性!)#include<iostream.h>classA{intx;public:A(inta){x=a;}virtualvoidg(){cout<<“A::x=”<<x<<endl;}};classB:publicA{inty;public:B(inta,intb):A(a){y=b;}virtualvoidf(){cout<<“B::y=”<<y<<endl;}};classC:publicB{intm;public:C(inta,intb,intc):B(a,b){m=c;}voidg(){cout<<“C::m=”<<m<<endl;}};classD:publicC{intn;public:D(inta,intb,intc,intd):C(a,b,c){n=d;}voidf(){cout<<“D::n=”<<n<<endl;}};voidmain(){Dd1(1,2,3,4);d1.f();d1.g();D*pd=&d1;pd->f();pd->g();D&dd1=d1;dd1.f();dd1.g();}【例】(派生类对象中一般成员函数的调用──方法㈡:可通过基类的对象指针、基类的对象引用来调用!但只能调用派生类中从该基类继承来的那部分成员函数!)#include<iostream.h>classA{intx;public:A(inta){x=a;}voidg(){cout<<“A::x=”<<x<<endl;}};classB:publicA{inty;public:B(inta,intb):A(a){y=b;}voidg(){cout<<“B::y=”<<y<<endl;}};classC:publicB{intz;public:C(inta,intb,intc):B(a,b){z=c;}voidg(){cout<<“C::z=”<<z<<endl;}voidf(){cout<<“Bye!”<<endl;}};voidmain(){Cc1(1,2,3);A*pa=&c1,&aa1=c1;pa->g();aa1.g();//pa->f();为什么不行?B*pb=&c1,&bb1=c1;pb->g();bb1.g();//pb->f();为什么不行?C*pc=&c1,&cc1=c1;pc->g();cc1.g();pc->f();}【例】(派生类对象中虚函数的调用──方法㈡:可通过基类的对象指针、基类的对象引用来调用!注意:调用的是派生类中的虚函数!若派生类中没有重新定义该虚函数,则调用的是上一层基类中的该虚函数,…)#include<iostream.h>classA{intx;public:A(inta){x=a;}virtualvoidg(){cout<<“A::x=”<<x<<endl;}};classB:publicA{inty;public:B(inta,intb):A(a){y=b;}voidg(){cout<<“B::y=”<<y<<endl;}};classC:publicB{intz;public:C(inta,int