网站大量收购闲置独家精品文档,联系QQ:2885784924

第二章C++程序设计基础预案.ppt

  1. 1、本文档共85页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
虚函数 增加子类方法的缺点 仅仅为了与继承而来的方法相区别,就在子类中引入一个新方法,那么在父类与其它子类以及该子类的子类中也出现类似的情况,系统中就会出现很多不同的方法名,使得类的定义难以理解,损害了继承的自然性。 像这样的方法,子类不管是否真正需要都得继承,导致越是低层的子类承受的此类负担越重,从而难于控制那些语法上正确而语义上不正确的消息传递。 虚函数 用数据成员加以控制 class Employee{ char *name; int age; protected: int retireAge; public: void changeAge(int newAge); void setRetireAge(int newRetireAge) void retire() Employee(char* n, int a); ~Employee(); }; #include”employee.h” class Manager:public Employee{ int level; public: void changeLevel(int l); Manager(char* n,int a,int l); ~Manager(); }; #include”employee.h” void Employee::retire() { if(agereretireAge) delete this; } 虚函数 该方法意味着要修改父类,并且只是为了满足程序设计的需要而不是应用的需要。如果父类的子类都提出此类要求,父类将被改的面目全非。 在OOP中应采用这样的原则:对别人写的或你继承的东西,如果不满意,先继承下来,在此基础上写适合要求的程序,而不是先考虑如何修改继承来的程序。 虚函数 要求: 当子类对父类的全盘继承不能适应应用要求时,能不能有选择的继承,而不改变父类的基本结构。 重置的基本思想是:通过一种动态联编机制的支持,使得子类在继承父类接口定义的前提下,用适合自己要求的实现去置换父类中的相应实现(保持父类中特定方法的语法,而只改变其语义) 虚函数 3 C++中的实现 虚拟函数:virtual functions class Employee{ char *name; protected: int age; public: void changeAge(int newAge); virtual void retire() Employee(char* n, int a); ~Employee(); }; #include”employee.h” class Manager:public Employee{ int level; public: void changeLevel(int l); void retire(); Manager(char* n,int a,int l); ~Manager(); }; #include”employee.h” void Employee::retire() { if(age55) delete this; } #include”manager.h” void Manager::retire() {if(age60) delete this; } 允许重置 重置声明 在子类中重新定义的函数,必需与基类中的虚函数的函数名、函数类型、参数个数和参数类型完全相同。 定义为虚函数的成员函数不能够在子类中被进行函数覆盖。 虚函数 虚函数 虚函数的特点 子类不改变父类中已有方法的接口定义 #include”employee.h” #include”manager.h” Void userFun1() {Employee m1(“Richard”,54); Manager *m2=new Employee(“stevin”,61,3); … m1.retire(); m2-retire(); … } 虚函数 class A {public: int a; void display(); }; class B:public A {public: void display(); … }; 虚函数与子类覆盖父类函数的区别 main() {A* a1; B b1; a1=b1; a1- display(); … } 这时

文档评论(0)

挑战不可能 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档