欢迎来到天天文库
浏览记录
ID:49920446
大小:5.92 MB
页数:18页
时间:2020-03-04
《面向对象程序设计 C++ 第二版 课件第8章 多态性和虚函数.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、学习目标了解静态联编和动态联编的概念掌握虚函数的定义和调用方法理解纯虚函数和抽象类的概念8.1联编的概念多态性是通过联编来实现的。所谓联编,是把函数调用与适当的函数代码相关联的动作,分为静态联编和动态联编。静态联编在程序执行前完成,在编译阶段决定执行哪个同名函数被调用,这称为静态联编;而在编译阶段不能决定执行哪个同名函数被调用,只有在执行阶段才能依据要处理的对象类型来决定执行哪个类的成员函数,其所支持的多态性称运行时的多态性,称为动态联编。是通过继承和虚函数实现的8.2动态联编和虚函数8.2.1虚函数的定义虚函数的
2、定义格式如下:virtual<返回类型><函数名>(<参数列表>){<函数体>}说明(1)virtual关键字声明的函数称为虚函数。(2)如果某类的一个成员函数声明为虚函数,则意味着该成员函数在派生类中可能有不同的实现。在基类的派生类中就可以定义一个其函数名、参数、返回类型均相同的虚函数。(3)当通过指针或引用来调用该虚函数时,将会采用动态联编的方式。8.2动态联编和虚函数8.2.2虚函数的调用通过对象指针或引用来调用虚函数时,调用到的虚函数由对象指针或对象引用所关联的实际对象所决定。因此,对象指针或引用关联到不同
3、类的对象时,调用到的虚函数就不同,实现了动态多态性。所以,利用虚函数来实现动态多态性,必须满足如下要求:(1)在基类中把成员函数定义为虚函数;(2)在派生类中定义与基类虚函数同名、同参数、同返回类型的成员函数,但函数体不同,以实现对不同对象的操作;(3)在main()函数中,通过对象指针或引用来调用虚函数。8.3纯虚函数和抽象类8.3.1纯虚函数纯虚函数是一种特殊的虚函数,它只有函数的声明,没有具体实现函数的功能,要求各派生类根据实际需要定义自己的版本,纯虚函数的声明格式如下:virtual<返回类型><函数名>(
4、<参数表>)=0;说明由于纯虚函数没有函数体,所以在派生类中没有重新定义纯虚函数之前,是不可以被调用该函数的,也不可以被继承。8.4静态多态性与动态多态性的比较在C++中,静态多态性具体表现为重载(overload);动态多态性具体表现为纯虚函数和覆盖(override)。另外,前面还提到了隐藏。8.5运算符重载运算符重载其实就是函数的重载,是一种重要的重载多态性。给已有运算符赋予更多的含义,使它能够用于特定类的对象,执行特定的功能,而且使用形式与基本类型数据的形式相同。C++语言支持运算符重载,但许多高级语言(如
5、Java语言)并不支持运算符重载。8.5.1运算符重载的一般规则运算符是C++系统内部定义的,它们具有特定的语法规则,如参数说明、运算顺序、优先级别等。因此,运算符重载时必须尊遵守一定的规则,不是所有的运算符都允许重载,C++语言允许重载的运算符如表8-1所示。8.5运算符重载如表8-1所示。8.5运算符重载运算符重载时必须遵守如下原则:1.重载的运算符是C++已经存在的运算符,不能主观臆造。2.运算符重载不能改变运算符的语法结构,即单目运算符只能重载为单目运算符,双目运算符重载只能重载为双目运算符。3.运算符重载
6、不能改变C++语言中已定义的运算符优先顺序和结合性。4.运算符重载一般不改变运算符的功能。例如,重载的“+”运算符不可以用来计算两个对象的乘积。5.不能重载的运算符有:(1)sizeof()运算符;(2)成员运算符(.);(3)指向成员的指针运算符(*);(4)作用域运算符(::);(5)条件运算符(?:);6.编译程序对运算符重载遵循函数重载的选择规则。8.5运算符重载8.5.2运算符重载为成员函数运算符重载为类的成员函数的一般形式为:<类型><类名::>operator<运算符>([<形参表>]){函数体;}说
7、明(1)“类型”是作为函数的返回类型;(2)“类名”是重载该运算符的类;(3)“operator”是关键字,是重载运算符的标志;(4)“运算符”是要重载的运算符;(5)“形参表”表示该运算符所需要的操作数,双目运算符重载为类的成员函数,它们包含一个形参,即运算符右则的操作数。8.5运算符重载1.双目运算符重载为类成员函数双目运算符有两个操作数,通常在运算符的左右两侧,如a+b,a
8、目运算符重载为类成员函数单目运算符中有一个操作数,如!a,-b,&c,++i等,重载单目运算符的方法与重载双目运算符的方法类似。但由于单目运算符只有一个操作数,因此运算符重载函数只有一个参数,且可以省略此参数。因为操作数由对象的this指针给出,就不需要任何参数。8.5运算符重载8.5.3运算符重载为友元函数运算符重载为类的友元函数的一般形式如下:frien
此文档下载收益归作者所有