欢迎来到天天文库
浏览记录
ID:62067734
大小:598.00 KB
页数:61页
时间:2021-04-14
《最新C备课讲义教程课件ppt.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C备课讲义教程虚函数多态性:调用同一个函数名,可以根据需要但实现不同的功能。多态性是面向对象的程序设计的关键技术。编译时的多态性(函数重载)运行时的多态性(虚函数)多态性运行时的多态性是指在程序执行之前,根据函数名和参数无法确定应该调用哪一个函数,必须在程序的执行过程中,根据具体的执行情况来动态地确定2可以将一个派生类对象的地址赋给基类的指针变量。基类对象派生类对象Baseb;Derived;Base*basep;basepbasep=&b;basepbasep=&d;basep只能引用从基类继承来的成员。xShow()xShow()yShow()basep->Show();basep->Sh
2、ow()基类指针派生类对象基类对象3classPoint{floatx,y;public:Point(){}Point(floati,floatj){x=i;y=j;}virtualfloatarea(void){return0.0;}};constfloatPi=3.14159;classCircle:publicPoint{//类Point的派生类floatradius;public:Circle(floatr){radius=r;}floatarea(void){returnPi*radius*radius;}};voidmain(void){Point*pp;//基类指针,可以将派生类
3、对象的地址赋给基类指针Circlec(5.4321);pp=&c;cout<area()<FuncName();一旦把基类的成员函数定义为虚函数,由基类所派生出来的所有派生类中,
4、该函数均保持虚函数的特性。在派生类中重新定义基类中的虚函数时,可以不用关键字virtual来修饰这个成员函数。8虚函数是用关键字virtual修饰的某基类中的protected或public成员函数。它可以在派生类中重新定义,以形成不同版本。只有在程序的执行过程中,依据指针具体指向哪个类对象,或依据引用哪个类对象,才能确定激活哪一个版本,实现动态聚束。9classA{protected:intx;public:A(){x=1000;}virtualvoidprint(){cout<<“x=”<5、000;}voidprint(){cout<<“y=”<print();//调用类A的虚函数pa=&b;pa->print();//调用类B的虚函数pa=&c;pa->print();}//调用类C的虚函数x=1000y=2000z=3000x=1006、0y=2000z=300010classBase{public:virtualintSet(inta,intb){.....}....};classDerive:publicBase{public:intSet(intx,inty){.....}.....};classBase{public:virtualintSet(inta,intb){.....}....};classDerive:publicBase{public:intSet(intx,inty=0){.....}.....};intSet(int,int)是虚函数两个Set()函数参数不一致,是重载,不是虚函数11关于虚函数,说明7、以下几点:1、当在基类中把成员函数定义为虚函数后,在其派生类中定义的虚函数必须与基类中的虚函数同名,参数的类型、顺序、参数的个数必须一一对应,函数的返回的类型也相同。若函数名相同,但参数的个数不同或者参数的类型不同时,则属于函数的重载,而不是虚函数。若函数名不同,显然这是不同的成员函数。122、实现这种动态的多态性时,必须使用基类类型的指针变量或基类引用,并使该指针或引用指向不同的派生类对象,并通
5、000;}voidprint(){cout<<“y=”<print();//调用类A的虚函数pa=&b;pa->print();//调用类B的虚函数pa=&c;pa->print();}//调用类C的虚函数x=1000y=2000z=3000x=100
6、0y=2000z=300010classBase{public:virtualintSet(inta,intb){.....}....};classDerive:publicBase{public:intSet(intx,inty){.....}.....};classBase{public:virtualintSet(inta,intb){.....}....};classDerive:publicBase{public:intSet(intx,inty=0){.....}.....};intSet(int,int)是虚函数两个Set()函数参数不一致,是重载,不是虚函数11关于虚函数,说明
7、以下几点:1、当在基类中把成员函数定义为虚函数后,在其派生类中定义的虚函数必须与基类中的虚函数同名,参数的类型、顺序、参数的个数必须一一对应,函数的返回的类型也相同。若函数名相同,但参数的个数不同或者参数的类型不同时,则属于函数的重载,而不是虚函数。若函数名不同,显然这是不同的成员函数。122、实现这种动态的多态性时,必须使用基类类型的指针变量或基类引用,并使该指针或引用指向不同的派生类对象,并通
此文档下载收益归作者所有