欢迎来到天天文库
浏览记录
ID:40238216
大小:540.50 KB
页数:61页
时间:2019-07-28
《C++程序设计 冯博琴 C++第9章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第9章多态性中国铁道出版社19.1多态性的概念多态性用相同的名字定义不同的函数,这些函数执行不同的过程,也就是说,同一名称拥有多种不同的功能和含义。静态多态性在编译时就确定同名操作的具体操作对象,也称为编译时的多态性,通过函数重载和模板实现动态多态性在程序运行过程中动态地确定操作的具体对象,也称为运行时的多态性,通过虚函数来实现确定具体操作对象的过程称为联编或绑定,联编也分为静态联编(静态绑定)和动态联编(动态绑定)。29.2虚函数9.2.1虚函数的定义虚函数在基类中进行定义,某个成员函数被声明为虚函数后,这个虚函数就可以在派生类中重新定义,在派生类中可能有不同的实现。定义虚函数的格式:vi
2、rtual函数类型函数名(形参表){函数体}3【例9-1】使用指针变量访问虚函数#includeusingnamespacestd;classA{public:virtualvoidfun(){cout<<"BaseA"<3、=&a1;p->fun();p=&b1;p->fun();p=&b2;p->fun();}6在一个派生类中重新定义基类的虚函数是函数重载的一种特殊形式,重载虚函数时,要求派生类中重载的函数其原型即函数名、返回类型、参数类型、参数个数及顺序与基类中函数的原型完全相同。79.2.2多继承中的虚函数【例9-2】在多继承中使用虚函数。#includeusingnamespacestd;classA1{public:virtualvoidfun()//函数fun()为虚函数{cout<<"BaseA1"<4、un()//函数fun()为一般函数{cout<<"BaseA2"<fun();p1=&b;p1->fun();p2=&a2;p2->fun();p2=&b;p2->fun();}109.2.3虚函数的传递性多层继承中,在基类中定义了虚函数,则在其派生类中可以重新定义虚函数,如果这个派生类再派生新的类,则在新的派生类多中仍然可以重新定义5、虚函数,因此,虚函数的特性是可以传递的。11【例9-3】多层继承中虚函数的传递性#includeusingnamespacestd;classA{public:virtualvoidfun()//函数fun()为虚函数{cout<<"ClassA"<6、9-3】(续)voidmain(){Aa,*p;Bb,*p1;Cc;cout<<"使用指针变量p"<fun();p=&b;p->fun();p=&c;p->fun();cout<<"使用指针变量p1"<fun();p1=&c;p1->fun();}14【例9-4】多条继承路径中虚函数的传递性#includeusingnamespacestd;classA{public:virtualvoidfun()//函数fun()为虚函数{cout<<"BaseA"<7、ic:voidfun()//函数fun()也为虚函数{cout<<"BaseB1"<
3、=&a1;p->fun();p=&b1;p->fun();p=&b2;p->fun();}6在一个派生类中重新定义基类的虚函数是函数重载的一种特殊形式,重载虚函数时,要求派生类中重载的函数其原型即函数名、返回类型、参数类型、参数个数及顺序与基类中函数的原型完全相同。79.2.2多继承中的虚函数【例9-2】在多继承中使用虚函数。#includeusingnamespacestd;classA1{public:virtualvoidfun()//函数fun()为虚函数{cout<<"BaseA1"<4、un()//函数fun()为一般函数{cout<<"BaseA2"<fun();p1=&b;p1->fun();p2=&a2;p2->fun();p2=&b;p2->fun();}109.2.3虚函数的传递性多层继承中,在基类中定义了虚函数,则在其派生类中可以重新定义虚函数,如果这个派生类再派生新的类,则在新的派生类多中仍然可以重新定义5、虚函数,因此,虚函数的特性是可以传递的。11【例9-3】多层继承中虚函数的传递性#includeusingnamespacestd;classA{public:virtualvoidfun()//函数fun()为虚函数{cout<<"ClassA"<6、9-3】(续)voidmain(){Aa,*p;Bb,*p1;Cc;cout<<"使用指针变量p"<fun();p=&b;p->fun();p=&c;p->fun();cout<<"使用指针变量p1"<fun();p1=&c;p1->fun();}14【例9-4】多条继承路径中虚函数的传递性#includeusingnamespacestd;classA{public:virtualvoidfun()//函数fun()为虚函数{cout<<"BaseA"<7、ic:voidfun()//函数fun()也为虚函数{cout<<"BaseB1"<
4、un()//函数fun()为一般函数{cout<<"BaseA2"<fun();p1=&b;p1->fun();p2=&a2;p2->fun();p2=&b;p2->fun();}109.2.3虚函数的传递性多层继承中,在基类中定义了虚函数,则在其派生类中可以重新定义虚函数,如果这个派生类再派生新的类,则在新的派生类多中仍然可以重新定义
5、虚函数,因此,虚函数的特性是可以传递的。11【例9-3】多层继承中虚函数的传递性#includeusingnamespacestd;classA{public:virtualvoidfun()//函数fun()为虚函数{cout<<"ClassA"<6、9-3】(续)voidmain(){Aa,*p;Bb,*p1;Cc;cout<<"使用指针变量p"<fun();p=&b;p->fun();p=&c;p->fun();cout<<"使用指针变量p1"<fun();p1=&c;p1->fun();}14【例9-4】多条继承路径中虚函数的传递性#includeusingnamespacestd;classA{public:virtualvoidfun()//函数fun()为虚函数{cout<<"BaseA"<7、ic:voidfun()//函数fun()也为虚函数{cout<<"BaseB1"<
6、9-3】(续)voidmain(){Aa,*p;Bb,*p1;Cc;cout<<"使用指针变量p"<fun();p=&b;p->fun();p=&c;p->fun();cout<<"使用指针变量p1"<fun();p1=&c;p1->fun();}14【例9-4】多条继承路径中虚函数的传递性#includeusingnamespacestd;classA{public:virtualvoidfun()//函数fun()为虚函数{cout<<"BaseA"<7、ic:voidfun()//函数fun()也为虚函数{cout<<"BaseB1"<
7、ic:voidfun()//函数fun()也为虚函数{cout<<"BaseB1"<
此文档下载收益归作者所有