重载的概念.pptVIP

  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文档。上传文档
查看更多
重载的概念

重载 1. 重载的概念 2. 运算符重载 1. 重 载 的 概 念 重载(overload)是C++语言静态多态性的表现形式,分为函数重载和运算符重载。函数重载由参数形式区分同名函数的不同版本。构造函数重载是函数重载的主要应用之一,它为对象创建提供了灵活方便的内部状态初始化手段。运算符重载使自定义抽象数据类型能像基本数据类型一样用系统已定义的运算符来书写表达式,这就使得对象的使用像内部变量的使用一样自然方便,因而带来了更加自然的系统可扩展性。 非面向对象的过程化语言要求每个过程或函数必须具有惟一的调用名。在这种命名约束机制下,许多参数不同但功能相似的函数必须通过不同的函数名调用。比如,在C语言的数学函数库中就有abs(),labs()和fabs() 3个函数分别作为求整型、长整型和浮点型数据类型的绝对值。C++语言提供了一种机制,使得对于不同的输入参数,使用统一的函数名定义各种不同输入参数时的实现版本,由编译程序根据函数参数的不同而选择使用相应的实现代码,这就叫做函数的重载。 例1 求绝对值函数abs()的重载。 int abs(int x) { return(x=0?x:-x); } float abs(float x) { return(x=0?x:-x); } long abs(long x) { return(x=0?x:-x); } double abs(double x) { return(x=0?x:-x); } 说明:表面上,这4个函数的代码相同,而实际上编译时产生的代码是不同的,程序运行时在内存中的存放位置也是不同的。 其实,在C语言中已经存在原始意义上的重载。例如,除法运算符“/”,当两个操作数均为整型时,语义为取商,而当两个操作数中有一个为浮点数或双精度数时,语义为普通有理数除法。这是由于相应于“/” 运算符,在两种情况下程序执行的是不同的代码。 运算符重载是的一种特殊形式,因为运算符本质上是函数名的特殊形式。 2. 运 算 符 重 载 重载运算符是C++的一个特性,它使得程序员可把C++运算符的定义扩展到运算分量是对象的情况。运算符重载的目的是使C++代码更直观、更易读。由简单的运算符构成的表达式常常比函数调用更简洁、易懂。 2.1 运算符重载的概念 一个数据类型的定义包括一个值集和一个作用于该值集的操作集。C++在提供内部基本数据类型的同时提供了许多预定义的运算符,用于各种表达式中,如算术运算符、逻辑运算符、比较运算符、取值、取地址、括号等。 基本数据类型上的运算符的语义等价为一个函数,如,若声明x,y为int或double等基本类型变量,则表达式x+y可以理解为函数add(x,y)或+(x,y),显然,使用前一种形式比使用后两种形式表达式的书写更简洁、更符合日常习惯。 运算符重载实际上是函数重载的特殊形式,C++语言允许系统预定义运算符的语义由程序员重新定义,这一机制称为运算符重载。运算符重载的目的就是用运算符的形式代替自定义类型的函数名,使程序员能以更加自然的方式使用自定义的数据类型,特别是类类型。 由程序员重新定义的运算符又称为运算符函数。在一个类中定义的运算符成员函数称类成员运算符,在类之外定义的运算符函数通常使用类的友元函数形式,称为友元运算符。大多数一元运算符和二元运算符都可以重载,但不允许重载三元运算符,不能创建新的运算符。 另外,下列运算符不能重载: :: # ? : .以及取指针所指的变量值 *等。 运算符重载可以改进程序的可读性,但不是非有不可。 注意,重载运算符时,不能改变它们原先的优先级顺序,也不能改变运算符所需操作数的个数。 2.2 类成员运算符重载 运算符重载的基本语法形式如下: 类型 类名::operator 运算符(参数表) //运算符函数头 { //运算符函数体 } 若将运算符函数头中“operator 运算符”部分用普通函数名代替,则与普通函数运算符函数头形式完全相同。Operator是专门用于定义重载运算符的系统保留字。在下面的例子中还可以看到,重载过的运算符还可以再重载

文档评论(0)

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

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

1亿VIP精品文档

相关文档