- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
10.2虚函数 虚函数是运行时多态的基础,它是引入派生类后用来表现基类和派生类成员函数之间的一种关系的。虚函数是一种非静态的成员函数,虚函数经过派生之后,在类族中可以实现运行时的多态。 虚函数提供了一种接口,它可以在一个或多个派生类中被重新定义。在派生类中重新实现虚函数时必须和基类中的函数原型完全一致,即是函数的返值、函数名、参数个数、参数的数据类型及顺序都必须相同。在不考虑继承的情况下,虚函数和普通函数用法相同。 返回 下一页 10.2虚函数 10.2.1虚函数的声明及应用 虚函数的定义格式为: virtual函数返值类型函数名(参数表) {函数体} 注意:虚函数声明只能出现在类声明中的函数原型声明中。 实现运行多态必备的三个条件为: (1)类之间要满足赋值兼容规则; (2)要声明虚函数; (3)调用虚函数操作可以由指向对象的指针或对象引用。 返回 上一页 下一页 10.2虚函数 系统判定函数成员是否是虚函数的3个原则: ①该函数是否与基类的虚函数同名; ②该函数是否与基类的虚函数具有相同的参数个数及相同的对应参数类型; ③该函数是否与基类的虚函数有相同的返回值或者满足赋值兼容规则的指针、引用的返回值。 返回 上一页 下一页 10.2虚函数 10.2.2虚析构函数 析构函数可以是虚函数,而构造函数却不能是虚函数。在基类的析构函数冠以“virtual”后,该析构函数就成为了虚析构函数,其派生类中的析构函数无需加“virtual”也随之成为虚析构函数。虚析构函数的访问权限是public的。 虚析构函数的声明格式为: virtual~类名(); 虚析构函数的功能:虚析构函数是运行过程中多态的基础,也是用来释放被申请的内存空间的。 虚析构函数的特征为没有函数返值类型,也没有参数。 返回 上一页 10.3多态性 多态是指同样的消息被不同类型的对象接收时导致完全不同的行为。所谓消息就是类的成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数。 面向对象语言的多态性可以分为四类:重载多态、强制多态、包含多态和参数多态。重载多态和强制多态又称为专用多态;包含多态和参数多态又称为通用多态。重载多态是同一个名字多个实现,函数的重载就属于此类。强制多态是通过语义操作把一个变元的类型加以变换,以符合一个函数或操作的要求,例如把整型数转换为浮点数类型就是属于强制多态。包含多态是解决类族中定义于不同类中的同名成员函数的多态行为,主要是通过虚函数来实现。参数多态与类属相关联,类属是一个可以参数化的模板,其中包含的操作所涉及的类型必须用类型参数实例化。 返回 下一页 10.3多态性 10.3.1多态性的分类 多态从实现的角度分可以分为两类:编译多态和运行多态。编译多态是在编译的过程中确定了同名操作的具体操作对象;而运行多态则是在程序的运行过程中才能动态地确定操作所用到的具体对象。这种确定操作的具体对象的过程称为联编,也称为编联、束定或绑定。联编是指计算机程序自身彼此关联的过程。也就是把一个标识符名和一个存储地址联系在一起的过程,用面向对象的术语:就是把一条消息和一个对象的方法结合的过程。联编可分为:静态联编和动态联编,静态联编就是在程序的编译阶段能够完成的程序联编,而动态联编要等到程序的运行阶段才能完成程序的联编。 返回 上一页 下一页 10.3多态性 10.3.2编译时的多态性 C++语言的编译时的多态主要是通过函数重载来实现的。在C++语言的编译阶段,函数被编译成原型形式,例如函数“stringfunc(inta,intch)”编译后的原型为“func_int_int”,函数“voidfunc(intb,intc)”编译后的原型为“func_int_int”,因为原型相同,所以这两个函数是一样的。 通过函数原型的概念可以重新定义“重载”,即是“函数名相同,原型不同即构成重载”。所以函数重载是函数名必须相同,也就是同一个函数名通过重载实现了不同的形态,而这些不同形态在编译的时候已经可以区分开来了,从而构成了“编译时的多态”,也称为静态联编。 返回 上一页 下一页 10.3多态性 10.3.3运行时的多态性 运行时的多态是通过虚函数来实现的。当被继承的基类中含有虚函数时,基类的指针根据所指对象的不同将调用不同的函数,具体调用哪个函数,编译时无法确定,只有在程序的运行时,才能确定,这就构成了“运行时多态”,也称为动态联编。运行时多态是指在程序的运行过程中才能动态地确定操作所针对的具体操作对象。联编工作在程序运行期间完成。 返回 上一页 下一页 10.3多态性 设置虚函数要注意以下几点: (1)只有类的成员函数才能说明为虚函数。因为虚函数仅仅适用于有继承关系的对象中,所以普通函数不能说明为虚函数。 (2)构造函数不能说明为虚函数,析
原创力文档


文档评论(0)