第6章第6章运算符重载-Read.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章第6章运算符重载-Read.doc

第6章 运算符重载 1 内容提要 1 6.1 运算符重载规则 1 6.2 用成员或友员函数重载运算符 2 6.3 几个典型运算符重载 3 6.4 类类型转换 4 第6章 运算符重载 内容提要 运算符重载的作用是令用户可以像操作基本数据类型一样,用简洁明确的运算符操作自定义的类对象。程序设计中,运算符重载主要用于数学类模仿运算符的习惯用法。 C++语言中大部分预定义的运算符都可以被重载。重载运算符函数可以对运算符做出新的解释,定义用户所需要的各种操作,但重载后原有的基本语义,包括运算符的优先级、结合性和所需要是操作数不变。 运算符函数既可以重载为成员函数,也可以重载义为友员函数或普通函数。 当一元运算符的操作数,或者二元运算符的左操作数是该类的一个对象时,以成员函数重载;当一个运算符的操作需要修改类对象状态时,应该以成员函数重载。如果以成友员函数重载,可以使用引用参数修改对象。 当运算符的操作数(尤其是第一个操作数)希望有隐式转换,则重载算符时必须用友员函数。 本章讨论了几个常用的算符重载。 构造函数和类型转换函数可以实现基本类型与类类型,以及类类型之间的类型转换。 6.1 运算符重载规则 程序员定义和使用重载运算符函数时,必须遵守C++有关语法规则。 6.1.1 重载运算符的限制 C++语言中大部分预定义的运算符都可以被重载。以下列出可以重载的运算符: + - * / % ^ | ~ ! = += -= *= /= %= ^= = |= = = == != = = || ++ -- -* ‘ - [] () new delete new[] delete[] 只有几个运算符不能被重载: . .* :: ?: sizeof 重载运算符函数可以对运算符做出新的解释,即定义用户所需要的各种操作。但运算符重载后,原有的基本语义不变。 6.1.2 运算符重载的语法形式 运算符函数是一种特殊的成员函数或友员函数。成员函数的语法形式为 类型 类名 :: operator op ( 参数表 ) { //相对于该类定义的操作 } 【例6-1】设计一个安全计数器。 用于类运算的运算符通常都要重载。但有两个算符系统提供默认重载版本。 赋值运算符“=”,系统默认重载为对象数据成员的复制; 地址运算符“”系统默认重载为返回任何类对象的地址。 当然,程序员也可以根据需要重载。 6.2 用成员或友员函数重载运算符 通常重载算符用成员函数或友员函数。它们的关键区别在于成员函数具有this指针,而友员函数没有this指针。 1.一元运算符 一元运算符不论前置或后置,都要求一个操作数: Object op 或 op Object 当重载为成员函数时,参数表为空。当重载为友员函数时,操作数由参数表的参数提供。 2.二元运算符 任何二元运算符要求左、右操作数: ObjectL op ObjectR 当重载为成员函数时,左操作数由对象ObjectL通过this指针传递,右操作数由参数ObjectR传递。 重载为友员函数时,左右操作数都由参数传递。 6.2.1 用成员函数重载算符 当一元运算符的操作数,或者二元运算符的左操作数是该类的一个对象时,重载算符函数一般定义为成员函数。 【例6-2】建立一个描述3维坐标的类TriCoor,重载算符“+”、“++”、和“=”,实现简单的算术运算。 6.2.2 用友员函数重载 当函数左右操作数类型不同时,用友员函数重载运算符,因为左右操作数都由参数传递,可以通过构造函数实现数据类型隐式转换。 【例6-3】复数运算。 当一个运算符的操作需要修改类对象状态时,应该以成员函数重载。例如,需要左值操作数的运算符(如 =,*=,++ 等)应该用成员函数重载。如果以友员函数重载,可以使用引用参数修改对象。 当运算符的操作数(尤其是第一个操作数)希望有隐式转换,则重载算符时必须用友员函数或普通函数。 C++中不能用友员函数重载的运算符有 = () [] - 6.3 几个典型运算符重载 本节讨论在数学类中常用的几个运算符重载的特点和应用。 6.3.1 重载 ++ 与 -- 自增和自减运算符有前置和后置两种形式。每个重载运算符的函数都必须有明确的特征,使编译器确定要使用的版本。C++规定,前置形式重载为一元运算符函数,后置形式重载为二元运算符函数。 【例6-4】例6-2中使用了成员函数重载++和—运算符。本例用友员函数重载++运算符。 6.3.2 重载赋值运算符 赋值运算符重载用于对象数据的复制。重载函数原型为: 类型 类名::operator= ( const

文档评论(0)

youbika + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档