- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 多态性 8.1 概述 8.2 运算符重载 8.3 虚函数 8.4 抽象类 8.1 概述 多态性(polymorphism)是指不同类型的对象在收到相同的消息时,做出了不同的响应。 C++语言的多态性是指定义了一批名字相同的函数,但是它们执行的是不同的操作。 绑定 绑定(binding)是指把一条消息与一个对象的方法相结合的过程,具体地说,绑定就是把一个标识符与一个存储地址联系在一起,以确定操作的具体对象。按绑定的时机划分,有静态绑定和动态绑定。其中静态绑定在程序编译链接的阶段完成,又称为前期绑定;动态绑定则是在程序运行的阶段完成,又称为后期绑定。 动态绑定 静态绑定支持的多态性称为编译时的多态性,C++主要通过函数重载和运算符重载,实现编译时的多态性。 动态绑定支持的多态性称为运行时的多态性,C++主要通过虚函数和抽象类,实现运行时的多态性。 8.2 运算符重载 通过定义函数重新解释运算符的方式,将运算符和类的对象结合在一起,这称为运算符重载。 运算符重载是C++提供的一个华丽的技巧,使程序员可以为用户设计更为直观的接口,并且增强了程序的可读性。 规则 C++语言的大部分运算符都可以被重载,只有5个运算符不能被重载。 运算符重载的本质是函数重载,在函数的定义中对运算符的操作赋予程序员自己新的解释。 C++的运算符重载一般有两种形式,重载为类的成员函数和重载为类的友元函数。 说明 1.只能重载现有的运算符,不能主观臆造C++语言未提供的运算符。 2.运算符重载不能改变运算符固有的优先级、结合性以及操作数的个数。 3.运算符重载的参数中至少有一个是自定义类型。 4.运算符重载必须显式定义。 5.不要试图改变运算符的原有语义。 重载为成员函数 class 类名 { public: 类型 operator 运算符(形参列表); … }; 类型 类名::operator 运算符(形参列表) { … } 说明 运算符重载为类的成员函数时,其函数形参的个数通常要比运算符原来的操作数少一个。 重载后缀运算符++时,其函数要增加一个整型形参。该形参只给出类型(int),不给出名字,它仅仅起到区别前缀运算符和后缀运算符的作用,并不参与实际的运算。 重载为类的友元函数 class 类名 { public: friend 类型operator 运算符(形参列表); … }; 类型 operator 运算符(形参列表) { … } 流插入运算符的重载 class fraction { public: friend ostream operator (ostream out, const fraction s); … }; ostream operator (ostream out, const fraction s) { outs.a”/”s.b; return(out); } 特殊运算符的重载 赋值运算符=、下标运算符[]、函数调用运算符( )以及成员间接访问运算符-的重载,必须采用重载为成员函数的形式。 如果类中定义了指针成员,则必须显式地定义赋值运算符重载函数,进行深拷贝。下标运算符重载之后,使得对象可以象数组一样动作。函数调用运算符的重载,使得对象的行为与函数的行为类似。 向量类 class vect { public: vect operator =(vect s); int operator [](int i); int operator ()(int i); … … private: int len; //向量长度 int *p; }; =重载 vect vect::operator =(vect s) { for(int i=0;ilen;i++) *(p+i)=*(s.p+i); return(*this);//返回对象自身 } [ ]重载 int vect::operator [](int i) { if(i=0||ilen) error(1); return(*(p+i-1)); } ( )重载 int vect::operator ()(int i) { if(i=0||ilen) error(1); return(*(p+i-1));
您可能关注的文档
- AutoCAD 2009工程绘图技术 覃国萍 第1章AutoCAD 2009基础知识新.ppt
- AutoCAD 2009工程绘图技术 覃国萍 第2章绘制二维基本图形新.ppt
- AutoCAD 2009工程绘图技术 覃国萍 第3章绘制二维复杂图形新.ppt
- AutoCAD 2009工程绘图技术 覃国萍 第4章绘制零件图一新.ppt
- AutoCAD 2009工程绘图技术 覃国萍 第6章轴测图新.ppt
- AutoCAD 2009工程绘图技术 覃国萍 第7章AUTOCAD设计中心和CAD标准新.ppt
- AutoCAD 2009实用教程 孙江宏 第3章 绘图初步新.ppt
- AutoCAD 2009实用教程 孙江宏 第6章 对象修改新.ppt
- AutoCAD 2009实用教程 孙江宏 第8章 面域造型新.ppt
- AutoCAD 2009实用教程 孙江宏 第10章 文字注释新.ppt
- 安徽省合肥市望龙中学2024~2025学年九年级上学期化学期中模拟试题(解析版).pdf
- 安徽省淮北市2024-2025学年七年级上学期期末语文试题(解析版).pdf
- 第三单元 课题1 第2课时 分子可以分为原子.ppt.pptx
- 安徽省淮北市部分学校2024-2025学年九年级上学期1月期末数学试题(解析版).pdf
- 安徽省淮北市部分学校2024-2025学年八年级上学期期末语文试题(解析版).pdf
- 安徽省淮北市部分学校2024-2025学年九年级上学期1月期末物理试题(解析版).pdf
- 安徽省淮北市部分学校2024-2025学年七年级上学期期末生物试题(解析版).pdf
- 安徽省淮北市部分学校2024-2025学年九年级上学期11月期中历史试题(解析版).pdf
- 安徽省淮北市部分学校2024-2025学年九年级上学期期末语文试题(解析版).pdf
- 安徽省淮北市2024-2025学年上学期七年级期中考试数学试题卷(解析版).pdf
原创力文档


文档评论(0)