ch5 运算符重载.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文档。上传文档
查看更多
ch5 运算符重载

不常用的运算符 下标运算符 [] 下标运算符operator[]必须是成员函数,它只接受一个参数,通常是整值类型 下标运算符所作用的对象应该像数组一样操作 该运算符一般返回一个元素的引用,以便用作左值 代码示例 vect 函数调用运算符 () 函数调用运算符必须用成员函数重载 是唯一允许带任意个数参数的运算符 这个运算符使对象看起来像一个函数 代码示例(e.g.) 在C++标准库中使用这个运算符创建函数对象 operator()还可以用来提供需要多个下标的操作 代码示例(e.g.) 运算符- 类类型的对象可以重载成员访问运算符-,以赋予一个类类型类似于指针的行为 通常用来实现灵巧指针类型,即一个类的行为像内置的指针类型,但支持某些额外的功能 重载方法 必须定义为一个成员函数 被重载为一元运算符,没有参数,当它在表达式中使用时,只根据左操作数的类型来选择它 返回类型必须是一个类类型的指针,或者是定义了箭头运算符的类的对象 如果返回类型是类类型的指针,则内置-操作的语义被应用在返回值上 如果返回的是另一个类的对象或引用,则重复这个过程,直到返回的是指针类型 代码示例(e.g.) 重载和 如果希望一个自定义的类型支持输入和输出操作需要提供重载的输入和输出运算符 operator和operator 只能用全局函数的形式重载这两个运算符 重载形式 ostream operator (ostream, const type); istream operator (istream, type); 代码示例(e.g.) new和delete new和delete是管理动态存储空间的运算符,它们是为通用目的而设计的 C++允许重载这两个运算符以满足特殊的需要 重载全局new和delete 为类重载new和delete 重载数组new和delete 重载全局new和delete 当全局版本的new和delete不能满足整个系统的要求时,可以对其重载 重载全局版本后,默认的版本就完全不能被访问,甚至在重新的定义里也不能调用它们。 重载形式 重载的new必须有一个size_t类型的参数,指定要分配的内存的长度; new返回一个void*指针,如果没有足够的存储单元,返回0。 size_t在库文件cstddef中用typedef定义 operator delete()的参数是一个由operator new()分配的void*指针,返回类型是void。 重载全局new和delete 重载全局new和delete之后,即使对内置类型的new和delete也使用重载后的运算符。 重载new和delete时,只是改变内存分配的方法,并不改变调用构造函数和析构函数的行为 代码示例 e.g. 为类重载new和delete 类可以定义自己new和delete来取代全局的new和delete来分配和释放本类型的对象 类成员operator new()的返回类型必须是void*类型,并且有一个size_t类型的参数 当new表达式创建一个类类型的对象时,编译器查看该类释放有一个成员operator new(),如果有,则选择这个函数为该对象分配内存;否则调用全局运算符new。 类成员operator delete()的返回类型是void,第一个参数的类型是void* 当delete表达式的操作数是一个指向类类型对象的指针时,编译器检查该类是否有一个成员operator delete(),如果有,则选择该函数为类对象释放内存;否则调用全局运算符delete。 代码示例(storage) 为类重载new和delete 增加或去掉一个类的operatpr new()和operator delete()并不影响用户的代码 因为new和delete表达式在调用全局new和delete与调用类成员operator new()和operator delete()时,其形式相同 程序员可以通过全局作用域解析符“::”来选择调用全局的new和delete。 operator new()和operator delete()都是类的静态成员,它们遵从静态成员函数的一般限制,但无需显式地将它们声明为静态的 重载数组new和delete 如果要分配和释放对象数组,就需要在类中重载operator new[]()和operator delete[]() 类成员operator new[]() 返回类型是void*,第一个参数的类型是size_t。 当一个new表达式创建一个类类型对象的数组时,编译器将检查该类是否有成员操作符operator new[](),如果有则调用该操作符来分配数组,否则将调用全局new[]。 成员operator delete[]() 返回类型是

文档评论(0)

badjka + 关注
文档贡献者

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

1亿VIP精品文档

相关文档