C++程序设计--对象分册(第3章)潘修改.ppt

  1. 1、本文档共56页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章多态性 本章学习重点掌握内容: 多态的概念和作用,多态的实现方法 常见运算符的重载 静态联编和动态联编 虚函数、纯虚函数和抽象基类的概念和用法 虚析构函数的概念和作用,虚析构函数的用法 第3章多态性 3.1多态性的概念 3.2 运算符重载 3.3联编和虚函数 3.4 纯虚函数和抽象类 3.5 综合应用实例 3.1多态性的概念 多态性(Polymorphism)是面向对象程序设计的重要特性之一,它与封装性和继承性一起构成了面向对象程序设计的三大特性。多态性是指当不同的对象收到相同的消息时,产生不同的动作。利用多态性可以设计和实现一个易于扩展的系统。 在面向对象程序设计里多态性主要体现在:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。C++支持两种形式的多态性,一种是编译时的多态性,称为静态联编。 3.2.1 运算符重载概述 在以前的学习中,C++中预定义的运算符的操作对象只能是基本数据类型如int或float等。实际上,对于很多用户自定义的类型(如类),也需要有类似的运算操作。 例如复数类Complex。 class Complex { public: Complex () { real=image=0; } Complex (double r, double i) { real = r, image = i; } void Print(); private: double real, image; }; 3.2.1 运算符重载概述 void Complex::Print() { if(image0) coutrealimagei; else coutreal+imagei; } 声明复数类的对象:complex c1(2.0, 3.0), c2(4.0, -2.0), c3。如果我们需要对c1和c2进行加法运算, “c3=c1+c2”,编译时却会出错,这是因为编译器不知道该如何完成这个加法。这时我们就需要编写程序来实现“+”运算符来作用于complex类的对象,这就是运算符的重载。运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时,导致不同类型的行为。 3.2.1 运算符重载概述 C++中运算符的重载虽然给我们设计程序带来很多的方便,但对运算符的重载时,以下的几种情况需要注意: (1)一般来说,不改变运算符原有含义,只让它能针对新类型数据的实际需要,对原有运算符进行适当的改造。例如,重载“+”运算符后,它的功能还是进行加法运算。 (2)重载运算符时,不能改变运算符原有的优先级别,也不能改变运算符需要的操作数的数目。重载之后运算符的优先级和结合性都不会改变。 (3)不能创建新的运算符,只能重载c++中已有的运算符。 (4)有些运算符不能进行重载。如:“.”类成员运算符、“*”类指向运算符、“::”类作用域运算符、“?:”条件运算符及“sizeof”求字节数运算符。 (5)重载运算符只适用于用户自定义的类的对象之间(以及它们和基本数据类型之间)的运算,C++基本数据之间的运算符的含义不能通过重载改变。 3.2.2 双目运算符重载 双目运算符就是运算符作用于两个操作数。下面通过一个例子对“+”运算符重载来学习一下双目运算符重载的应用。 【例3.1】定义一个复数类,重载“+”运算符为复数类的成员函数,使这个运算符能直接完成两个复数的加法运算,以及一个复数与一个实数的加法运算。 3.2.3 赋值运算符重载 在C++中有两种类型的赋值运算符:一类是是“=”即直接赋值的运算符。另一类是“+=”和“-=”等复合赋值运算符。下面以“=”运算符为例子讨论。复合赋值运算符的重载作为练习,读者可以自行推导。下面分别进行讨论。 【例3.5】 “=”运算符重载的示例。 #includeiostream #includecstring using namespace std; class CMessage { public: CMessage( ) { buffer=new char(\0); } ~CMessage( ) { delete [ ] buffer; } void main( ) { CMessage c1; c1.set(initial c1 message); c1.display( ); CMessage c2; c2.set(initial c2 message); c2.display( );

文档评论(0)

考试教学资料 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档