高质量C++编程 2.运算符重载.pdf

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

高质量C++编程 ——运算符重载和转换函数 项目需求 我们的项目中,由于GCPtr 类不但要 能动态申请heap区,还要能申请数组, 并且遍历这个数组、具有边界检查能力。 于是需要具有如此能力的另一个类的协 却仍然 助——Iter 类。 却仍然 却仍然 为了提供如同普通指针一样行为,利 用操作符重载,它定义了包括算术运算 在内的所有指针操作,以协助GCPtr 类。 却仍然 其结构如右图所示: 运算符重载概念 在函数重载的基础上,C++语言还提供了用户重塑运算符的机制。 表现为用函数形式来重新描述运算符的功能。这种基本运算符 和用户定义的函数形式的运算符共存的机制叫运算符重载。 如此一来,使本不具备运算能力的对象也具有了该项能力,能和 基本类型并驾齐驱了。 运算符重载设计的是否必要得当的唯一标准,是看该对象是否如 同一个普通变量一样可用运算符。不是多多益善,而是适可而 止。 注意:重载运算符函数的参数必须至少含有一个类类型操作数, 不可以全是基本类型。 运算符分类 C++中除下列运算符之外的所有运算符可以重载: . .* :: sizeof typeid ?: static_cast dynamic_cast const_cast reinterpret_cast || , 唯一的一个三目运 这三个运算符是许 算符不能重载。 多教程没有提到的。 可重载运算符: + - * / % ^ | ~ ! = = = ++ -- == != += -= /= %= ^= = |= *= = = [] () - -* new new [] delete delete [] 运算符重载的形式 重载的运算符函数是为类对象服务的,可以作为类的成员函数, 也可以作为类的友元函数。 1. 重载为类成员函数(要受类成员存取权限约束) ,对象本身就是函 数的调用者,另一个运算对象则作为函数的参数(或者没有)。this 指针即是发起调用的对象。 形参个数是原操作数个数- 1 (后置++、--除外) 这一规则限制了重载函数写成静态函数形式。 2. 重载为友元函数。由于没有this 指针,所以: 形参个数就是原操作数个数。 只能重载C++语言中已有的运算符, 复习:运算符重载的规则: 不可臆造新的; 不改变原运算符的优先级和结合性; 不能改变操作数个数; 不可声明为类属性; 要符合该运算符的使用习惯; 运算符重载的显式和隐含调用 重载的运算符是个函数,于是

文档评论(0)

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

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

1亿VIP精品文档

相关文档