C++多态性和虚函数.ppt

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++多态性和虚函数.ppt

* * * * * * * * * * * * double Application::Compute(Shap *s[],int n) const { double sum=0; for(int i=0;in;i++) sum+=s[i]-Area(); return sum; } class MyProgram:public Application { public: MyProgram(); ~MyProgram(); double Run(); private: Shap **s; }; * MyProgram::MyProgram() { s=new Shap*[3]; s[0]=new Triangle(3.0,5.0); s[1]=new Rectangle(5.0,8.0); s[2]=new Trapezoid(12.0,8.0,6.0); } MyProgram::~MyProgram() { for(int i=0;i3;i++) delete s[i]; delete[] s; } * double MyProgram::Run() { double sum=Compute(s,3); return sum; } void main() { MyProgram M; coutAreas Sum=M.Run()endl; } * 该程序结果分析如下: 该程序有6个类,其中1个抽象类和它的3个子类,另外,一个基类和派生类,图示如下: Shap Triangle Rectangle Trapezoid MyProgram Application 求多个几何图形面积之和的程序 用户设置几何图形的程序 各种几何图形面积类库 * 该程序结构上的特点: 将几何图形面积的类库设计与应用程序的设计分开,前者可由程序员开发,后者由用户编写。 类库设计的扩展十分方便。 用户编写的程序十分简单。 该程序体现出面向对象程序设计的特点。 * 11.6 虚析构函数 构造函数不能说明为虚函数。 析构函数可以说明为虚函数。 class B { public: …… virtual ~B(); }; 虚析构函数的作用在于相当于在使用delete删除一个对象时,能确保析构函数被正确执行。因为设置虚析构函数可以采用动态联编,于是可在运行时来选择析构函数。 见 P339 例11.16 * 本章小结 本章应掌握的主要内容如下: 1.多态性在C++语言中体现在以下方面: ⑴函数重载 ⑵运算符重载 ⑶动态联编 2.动态联编的实现需要下述条件: ⑴公有继承 ⑵虚函数 ⑶指针或引用 3.纯虚函数和抽象类 面向对象程序设计的层次结构 * * * * * * * * * * * * * * * * * * * * * * * * * * 第11章 多态性和虚函数 * 多态性指相同的函数调用被不同的对象接收时,可以导致不同的行为。它使程序员在设计程序时可以对问题进行更好的抽象,以设计出重用性和维护性俱佳的程序。 多态性的意义就在于,各类的对象各以不同的方式响应同一消息,即所谓的“同一接口,多种方式”。 函数重载和运算符重载,是多态性的一般内容。 动态联编和虚函数,是多态性的一般内容。 * 11.1函数重载 函数重载规则是具有相同名字不同实现的函数,需在函数参数的个数、类型或顺序上有所不同以便选择调用。 * 11.2运算符重载 运算符重载的含义是对已有的运算符进行重新定义,使其具有新功能。 即为了满足某种操作的需要,在原有运算符实现不了、又不增加新的运算符种类的基础上,对含义相近的运算符进行重载。 例如左移运算符 ,重载后变为插入运算符。 * 11.2.1 运算符重载中的几个问题 除 . ,.* ,:: ,?: 这4种运算符外,其余运算符都可以重载。 运算符重载的“四个不变”: 优先级不变 结合性不变 操作数个数不变 语法结构不变 运算符重载实际上是通过定义一个函数来实现的。重载运算符的选择同于重载函数的选择规则,即按不同类型或个数的参数来选择不同的重载运算符。 * 11.2.2 运算符重载的两种形式 本着运算符重载后应能访问类中的私有成员的原则,运算符重载函数应是成员函数或友元函数。 * 1. 运算符重载为成员函数形式 格式如下 类型 operator 运算符 (参数表) {…} 一般地,单目运算符采用成员函数重载时,该参数表无参数; 双目运算符采用成员函数形式重载时,该参数表中有一个参数。 调用该函数的对

文档评论(0)

000 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档