第10章 多态性、虚函数及运算符重载.pptVIP

第10章 多态性、虚函数及运算符重载.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第10章 多态性、虚函数及运算符重载

第10章 多态性、虚函数与运算符重载 田秀霞 tianxiuxia_76@ 上海电力学院计信学院 本章主要内容 §10.1 多态性的概念 §10.2 虚函数 §10.3 纯虚函数与抽象类 §10.4 运算符重载 §10.1 多态性的概念 多态 同样的消息被不同类型的对象接收时导致不同的行为 消息 是指对类的成员函数的调用 不同的行为 不同的实现,就是是指执了不同的函数 多态的分类 从系统实现的角度看 静态多态性 函数重载 运算符重载 动态多态性 虚函数实现 从实现的角度看 编译时多态性 程序编译时系统就决定调用哪个函数 运行时多态性 程序运行的过程中,类的成员函数能根据调用它的对象类型自动作出适应性调整 §10.2 虚函数 虚函数是实现程序多态性的一个重要手段。 利用虚函数可以方便地使用基类对象指针或引用访问派生类对象的同名函数。 注意 构造函数不能声明为虚函数 析构函数可以声明为虚函数。如果基类的析构函数被声明为虚函数,则派生类的析构函数也自动成为虚函数。 §10.3 纯虚函数与抽象类 纯虚函数 virtual 函数类型 函数名(参数列表)= 0; “=0”只是一种表示形式,用它来告诉编译系统这个函数是纯虚函数。纯虚函数没有函数体,且不能被调用。 抽象类 在一个类的所有成员函数中,至少有一个是纯虚函数,那么这个类就叫做抽象类。 由于纯虚函数不可以被调用,所以抽象类不能建立对象,它一般是作为基类去建立派生类,因此又将其称为抽象基类。 §10.4 运算符重载 加法运算符可以实现对整型、单精度型和双精度型数据的和运算。 加法运算符不能实现两个复数的相加。 用户可定义一个复数类型,并通过重载加法运算符实现两个复数相加。 思考问题 运算符重载 运算符重载 是对已有的运算符赋予多重含义 同一个运算符作用于不同类型的数据导致不同类型的行为。 运算符重载的实质就是函数重载。 运算符重载的定义 函数类型 operator运算符(参数列表) { 函数体 } C++中可以重载的运算符 C++中不可以重载的运算符 运算符重载的实现 重载为类的成员函数 重载为类的友元函数 重载双目运算符的方法 重载为类的成员函数 函数类型 operator 运算符(类类型 形参1) { … } 重载为类的友元函数 函数类型 operator 运算符(类类型 形参1,类类型 形参2) { … } 下面程序实现了两个时间的加法,如5.8+20.5i + 2.2+3.6i = 8.0+24.1i 友元函数实现 重载单目运算符 C++允许重载的单目运算符包括+(正)、-(负)、*(指针间接引用)、(取地址)、!(逻辑非)、~(取反)等。 其中经常使用的有++(自增)、--(自减)运算符。 单目运算符同样既可以定义为成员函数,也可以定义为友元函数。 重载单目运算符的方法 重载为类的成员函数 函数类型 operator 运算符( ) { … } 重载为类的友元函数 函数类型 operator 运算符(类类型 形参1) { … } 思考问题 I/O运算符重载 C++的I/O流库的一个重要特性就是能够支持新的数据类型的输出和输入。用户可以通过对插入符()和提取符()进行重载来支持新的数据类型。 重载为友元函数 运算符重载注意事项 用户不可以自己定义新的运算符,只能对已有的C++运算符进行重载。 重载不能改变运算符运算对象(即操作数)的个数。 重载不能改变运算符的优先级别和结合性。 重载运算符的函数不能有默认参数。 重载的功能应当与原有功能相类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型。 用于类对象的运算符一般必须重载,但取地址运算符“”不必重载,赋值运算“=”一般情况下也不必重载,只有当系统提供的默认的对象赋值运算符不能满足程序的要求时才需要重载。 小结与复习建议 主要内容 多态 运算符重载 虚函数 达到的目标 掌握二元运算符重载 掌握一元运算符重载 重载为成员函数和重载为友元函数 理解虚函数 实验三 void main() { Complex a(3.0,4.0),b(10.5,20.5),c; c=a-b; c.print(); } 等价于 c=operator-(a,b) a操作数1,b操作数2 (-7.5,-16.5) #include iostream using namespace std; class Date { int month,day,year; public: Date(int m=0,int d=0,int y=0):month(m),day(d),year(y){}; Date operator+(int); /

文档评论(0)

yaocen + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档