文档详情

面向对象程序设计(C++)( 第二版) 课件 第8章 多态性和虚函数.ppt

发布:2017-08-16约3.83千字共18页下载文档
文本预览下载声明
尚辅网 尚辅网 * * * * * * * * * * % 大连理工大学出版社 地址:大连市软件园路80号 发行:0411E-mail : dutp@ C++ 面向对象程序设计 新世纪高职高专软件专业系列规划教材 第7章 继承与派生 第8章 多态和虚函数 第9章 模板和异常处理 第10章 文件的输入输出 第11章 Visual C++编程基础 第1章 绪论 第2章 数据类型和表达式 第3章 控制结构 第4章 复合数据类型 第5章 函数 第12章 MFC应用程序实例 第6章 类与对象 xxx xxxxx 目 录 页 xx 目 录 页 第8章 多态性和虚函数 大连理工大学出版社 地址:大连市软件园路80号 E-mail : dutp@ URL:http://www.dutp,cn 尚辅网 尚辅网 尚辅网 学习目标 了解静态联编和动态联编的概念 掌握虚函数的定义和调用方法 理解纯虚函数和抽象类的概念 尚辅网 8.1 联编的概念 多态性是通过联编来实现的。所谓联编,是把函数调用与适当的函数代码相关联的动作,分为静态联编和动态联编。静态联编在程序执行前完成,在编译阶段决定执行哪个同名函数被调用,这称为静态联编;而在编译阶段不能决定执行哪个同名函数被调用,只有在执行阶段才能依据要处理的对象类型来决定执行哪个类的成员函数,其所支持的多态性称运行时的多态性,称为动态联编。是通过继承和虚函数实现的 尚辅网 8.2 动态联编和虚函数 8.2.1 虚函数的定义 虚函数的定义格式如下: virtual 返回类型 函数名(参数列表) { 函数体 } 说明 (1) virtual关键字声明的函数称为虚函数。 (2) 如果某类的一个成员函数声明为虚函数,则意味着该成员函数在派生类中可能有不同的实现。在基类的派生类中就可以定义一个其函数名、参数、返回类型均相同的虚函数。 (3) 当通过指针或引用来调用该虚函数时,将会采用动态联编的方式。 尚辅网 8.2 动态联编和虚函数 8.2.2 虚函数的调用 通过对象指针或引用来调用虚函数时,调用到的虚函数由对象指针或对象引用所关联的实际对象所决定。因此,对象指针或引用关联到不同类的对象时,调用到的虚函数就不同,实现了动态多态性。 所以,利用虚函数来实现动态多态性,必须满足如下要求: (1) 在基类中把成员函数定义为虚函数; (2) 在派生类中定义与基类虚函数同名、同参数、同返回类型的成员函数,但函数体不同,以实现对不同对象的操作; (3) 在main()函数中,通过对象指针或引用来调用虚函数。 尚辅网 8.3 纯虚函数和抽象类 8.3.1 纯虚函数 纯虚函数是一种特殊的虚函数,它只有函数的声明,没有具体实现函数的功能,要求各派生类根据实际需要定义自己的版本,纯虚函数的声明格式如下: virtual 返回类型 函数名(参数表)= 0; 说明 由于纯虚函数没有函数体,所以在派生类中没有重新定义纯虚函数之前,是不可以被调用该函数的,也不可以被继承。 尚辅网 8.4 静态多态性与动态多态性的比较 在C++中,静态多态性具体表现为重载(overload);动态多态性具体表现为纯虚函数和覆盖(override)。另外,前面还提到了隐藏。 尚辅网 8.5 运算符重载 运算符重载其实就是函数的重载,是一种重要的重载多态性。给已有运算符赋予更多的含义,使它能够用于特定类的对象,执行特定的功能,而且使用形式与基本类型数据的形式相同。C++语言支持运算符重载,但许多高级语言(如Java语言)并不支持运算符重载。 8.5.1 运算符重载的一般规则 运算符是C++系统内部定义的,它们具有特定的语法规则,如参数说明、运算顺序、优先级别等。因此,运算符重载时必须尊遵守一定的规则,不是所有的运算符都允许重载,C++语言允许重载的运算符如表8-1所示。 尚辅网 8.5 运算符重载 如表8-1所示。 尚辅网 8.5 运算符重载 运算符重载时必须遵守如下原则: 1. 重载的运算符是C++已经存在的运算符,不能主观臆造。 2.运算符重载不能改变运算符的语法结构,即单目运算符只能重载为单目运算符,双目运算符重载只能重载为双目运算符。 3.运算符重载不能改变C++语言中已定义的运算符优先顺序和结合性。 4.运算符重载一般不改变运算符的功能。例如,重载的“+” 运算符不可以用来计算两个对象的乘积。 5.不能重载的运算符有:(1) sizeof()运算符;(2) 成员运算符(.);(3) 指向成员的指针运算符(*);(4) 作用域运算符(::);(5) 条件运算符(?:);
显示全部
相似文档