- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c201105多态性
面向对象技术与C++ 计算机学院 5-0 分析结果? #includeiostream.h class point { double x,y; public : point (double i,double j) {x=i;y=j;} double area() {return 0.0;} }; class rectangle : public point { double w,h; public : rectangle(double i,double j,double m,double n):point(i,j) {w=m;h=n;} double area() {return w*h;} }; void fun(point s) { couts.area()endl; } void main() { rectangle rec(3.0,5.0,15.0,25.0); fun(rec);} 第五章 多态性 本章主要内容: 多态性 同一名称,不同的功能实现方式 运算符重载 多态的经典内容 虚函数 动态绑定 纯虚函数 统一接口 抽象类 定义一个框架,由其衍生对象完善 一、多态性 多态性:是指不同对象在收到相同的消息时,产生不同的动作——用同一个名字定义不同的函数,执行不同但相似的操作——实现“一个接口,多种方法”。 多态的实现: 函数重载:通过形参来区分 运算符重载:只是一种“语法修饰”,是专用格式的函数重载 虚函数:冠以关键字 virtual 的成员函数称为虚函数 二、联编的概念及分类 1、联编的概念 联编:源程序经过编译、联接成可执行文件的过程 ——即将可执行代码联编(装配)在一起的过程。 2、联编的分类: 静态联编(前期联编):在运行前完成的联编——在编译时完成(要求在编译时就知道调用函数的全部信息)——其优点是“效率高”。(重载函数使用静态联编。) 动态联编(后期联编):在运行时才完成的联编——在程序运行时动态调用所需函数——优点是提供了更好的“灵活性”、问题的“抽象性”、程序的“易维护性”。(switch 语句和 if 语句是动态联编的例子) 三、多态性的分类 编译时多态性:静态联编支持的多态性(静态多态性)——通过函数重载及运算符重载实现。 运行时多态性:动态联编支持的多态性(动态多态性)——通过虚函数实现。 四、函数重载 同一个类中的同名函数——参数个数不一样、参数类型不一样、参数个数及类型不一样; 不同类中的同名函数——通过类名调用或类的对象调用。 同一个类中同名的普通成员函数及常量成员函数——通过const实现重载。 第一节 虚函数和基类指针 冠以关键字 virtual 的成员函数称为虚函数 实现运行时多态的关键首先是要说明虚函数,另外,必须用基类指针调用派生类的不同实现版本 虚函数与派生类相结合,使C++能支持运行时多态性——实现在基类中定义派生类所拥有的通用“接口”,而在派生类中定义具体的实现方法,即“一个接口,多种方法”。 5-1 #includeiostream.h class Base { public : Base(char xx) { x = xx; } void who() { cout Base class: x \n ; } protected: char x; } ; class First_d : public Base { public : First_d(char xx, char yy):Base(xx) { y = yy; } void who() { cout First derived class: x , y \n ; } protected: char y;} ; class Second_d : public First_d { public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) { z = zz; } void who() { cout Second derived class: x , y , z \n ; } protected: char z;} ; void main() { Base B_obj( A
文档评论(0)