- 1、本文档共72页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c程序新设计课件(第3章)
第3章多态性 本章学习重点掌握内容: 多态的概念和作用,多态的实现方法 常见运算符的重载 静态联编和动态联编 虚函数、纯虚函数和抽象基类的概念和用法 虚析构函数的概念和作用,虚析构函数的用法 3.1多态性的概念 多态性(Polymorphism)是面向对象程序设计的重要特性之一。多态性是指当不同的对象收到相同的消息时,产生不同的动作。利用多态性可以设计和实现一个易于扩展的系统。 多态性主要体现在:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为。也就是说,每个对象可以用自己的方式去响应共同的消息。C++支持两种形式的多态性,一种是编译时的多态性,称为静态联编。一种是运行时多态,称为动态联编。 3.2.1 运算符重载 3.2.1 运算符重载概述 在以前的学习中,C++中预定义的运算符的操作对象只能是基本数据类型如int或float等。实际上,对于很多用户自定义的类型(如类),也需要有类似的运算操作。 例如复数类Complex。 class Complex { public: Complex () { real=image=0; } Complex (double r, double i) 3.2.1 运算符重载概述 { real = r, image = i; } void Print(); private: double real, image; }; void Complex::Print() { if(image0) coutrealimagei; else coutreal+imagei; } 3.2.1 运算符重载概述 声明复数类的对象: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.2.1 运算符重载概述 (3)不能创建新的运算符,只能重载c++中已有的运算符。 (4)有些运算符不能进行重载。如:“.”类成员运算符、“*”类指向运算符、“::”类作用域运算符、“?:”条件运算符及“sizeof”求字节数运算符。 3.2.2 运算符重载的实现 运算符重载的本质就是函数重载。在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用的函数,这个过程是在编译过程中完成的。运算符重载形式有两种:重载为类的成员函数和重载为类的友元函数。 1. 运算符重载为类的成员函数 语法形式如下: 函数类型 operator 运算符(形参表) { 函数体;} 3.2.2 运算符重载的实现 2. 运算符重载为类的友元函数 运算符重载还可以为友元函数。当重载友元函数时,将没有隐含的参数this指针。语法形式如下: friend 函数类型 operator 运算符(形参表); 运算符重载为友元函数时,要在函数类型说明之前使用friend关键词来说明。 3.2.3 双目运算符重载 双目运算符就是运算符作用于两个操作数。下面通过一个例子对“+”运算符重载来学习一下双目运算符重载的应用。 【例3.1】定义一个复数类,重载“+”运算符为复数类的成员函数,使这个运算符能直接完成两个复数的加法运算,以及一个复数与一个实数的加法运算。 #include iostream.h class Complex { public: Complex () { real=image=0; } Complex (double r, double i) { real = r, image = i; } void Print(); Complex operator + (Complex
您可能关注的文档
- css样破式表和模板.ppt
- css样式恶定义介绍.ppt
- currencyconvertercal都culator一款好用的app应用软件.pptx
- customerserviceprocess0平221.ppt
- cvpr13带显著性论文速读.pptx
- cwp线浅析高考电学题.ppt
- cyu阿房宫赋(一恶)389.ppt
- cyu邓稼先387.日ppt2.ppt
- cz货物贸易外汇管理政策与实务培训(并企业版).ppt
- c程序嗄设计第8章1.ppt
- 吉安县公开招聘专职文明实践员笔试备考试题及答案解析.docx
- 2025重庆枫叶国际学校招聘教师笔试备考试题及答案解析.docx
- 游机队电玩自制联网教程-tplink.pdf
- 2025重庆新华出版集团招聘1人笔试模拟试题及答案解析.docx
- 2025宜宾高新丽雅城市产业发展有限公司公开招聘笔试模拟试题及答案解析.docx
- 2025云南保山市龙陵县勐糯镇人民政府招聘合同制专职消防员1人笔试模拟试题及答案解析.docx
- 11.1生活中常见的盐 九年级化学人教版下册.pptx
- 6.1法律保护下的婚姻 高二政治《法律与生活》课件(统编版选择性必修2)(新版).pptx
- 文昌市中小学教师校园招聘29人笔试模拟试题及答案解析.docx
- 10.1.5 常见的酸和碱(第5课时)课件-九年级化学人教版下册.pptx
文档评论(0)