C语言程设计基础多态.ppt

  1. 1、本文档共81页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言程设计基础多态

class STUDENT: public MEMBER { public: virtual void answer() { cout I am a student.\n; return; } }; int main() { MEMBER member; TEACHER teacher; STUDENT student; MEMBER *who; who=member; who-answer(); who=teacher; who-answer(); who=student; who-answer(); return 0; } 虚函数的说明用虚函数实现动态绑定的关键:必须用指向基类的指针来访问虚函数。 若一函数是类中的虚函数,则称该函数具有虚特性 在派生类中重定义从基类中继承过来的函数:函数原型保持不变 仅仅返回类型不同,其余相同,错误 函数原型不同,仅函数名相同,这是一般的函数重载,虚特性丢失 当一个派生类没有重新定义虚函数时,则使用其基类定义的虚函数版本 #include iostream.h class BASE { public: virtual void f1( ) { …… } virtual void f2( ) { …… } virtual void f3( ) { …… } void f ( ) { …… } }; class DERIVED:public BASE { public: void f1( ) { …… }//虚函数的重定义,f1在该类中还是虚的 void f2( int a ) { …… } // 函数重载,虚特性丢失 char f3( ) { …… } //编译时出错 void f ( ) { …… } // 普通函数的重定义 }; void main( ) { DERIVED d; BASE *p = d ; // 基类指针p指向派生类对象 p-f1( ); //调用DERIVED::f1( ); 动态绑定 p-f2( ); //调用BASE::f2( ); 静态绑定 p-f ( ); //调用BASE::f( ); 静态绑定 ((DERIVED *)p)-f2(100); } 虚函数的限制: 虚函数必须是类的成员函数。 不能将友元说明为虚函数。 一旦一个函数被说明成虚函数,不管经历了多少派生类层次,都将保持其虚特性。 如:class THREE_D:public FIRST_D { public: void who( ) { cout“Three Derivation\n”;} // 继承成员的重定义,who仍为虚函数 }; 2 、静态绑定与动态绑定 绑定(binding):将一个函数调用链接上相应的函数体代码的过程。 绑定的两种形式: 静态绑定(早期绑定):在编译阶段绑定 --缺省的函数调用方式 动态绑定(晚期绑定):在程序运行阶段绑定 动态绑定必须使用积累对象指针来访问虚函数才可实现,直接使用对象无法获得多态性。 如: member=teacher; member.answer(); //输出:I am a member member=student; member.answer(); //输出:I am a member C++允许将动态绑定强制定为静态绑定,如: who=student; who-MEMBER::answer(); 3 、设计合适的绑定方式 静态绑定 优点:执行效率高、占用内存少。 缺点:缺乏灵活性。 动态绑定: 优点:灵活性、可扩充与可重用。 缺点:降低程序执行效率。 6 抽象类 1、 纯虚函数 线性表TABLE的多种实现: ARRAY_TABLE、LINKED_TABLE、FILE_TABLE a[1] a[0] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 97 93 90 89 85 76 69 93 90 89 85 76 69 … 查找表中是否有一个元素 BOOLEAN search(ELEMENT x) { BOOLEAN result=FALSE; start(); while(!exhausted()) { if(get_element()==x) { r

文档评论(0)

130****9768 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档