vc++中的重载.doc

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

一、重载规则 I.可以重载的操作符 + - * / % ^ | ~ ! = += -= *= /= %= ^= = |= = = == != = = || ++ -- -* , - [] () operator new operator new[] operator delete operator delete [] II.不能重载的操作符 :: . .* ? : sizeof typeid new delete static_cast dynamic_cast const_cast reinterpret_cast III.基本规则 1.一元操作符可以是不带参数的成员函数[1]或带一个参数的非成员函数[1]。 2.二元操作符可以是带一个参数的成员函数[1]或带两个参数的非成员函数[1]。 3.operator=、operator[]、operator()、operator-只能定义为成员函数[1]。 4.operator-的返回值必须是一个指针或能使用-的对象。 5.重载 operator++ 和 operator-- 时带一个 int 参数表示后缀,不带参数表示前缀。 6.除 operator new 和 operator delete 外,重载的操作符参数中至少要有一个非内建数据类型。 7.x@y 有哪些信誉好的足球投注网站范围为:x 成员函数-- 全局函数/X所在名字空间中的函数/Y所在名字空间中的函数/X的友元函 ??? 数/Y的友元函数。 8.重载的的操作符应尽量模拟操作符对内建类型的行为。 二、使用重载 I.操作符重载的一些建议 ???? 1.只将会改变第一个参数的值的操作符(如: +=)定义为成员函数,而将返回一个新对象的操作符(如: +)定义为非成员函数(并使用 += 来实现)。 ???? 2.只有非成员函数才能在左参数上实施性别转换,如果需要进行转换则应将操作符定义为非成员函数。 ???? 3.对一元操作符, 为避免隐式转换最好将其重载为成员函数。 ???? 4.对二元操作符, 为能在左操作数上能进行和右操作数一样的隐式转换, 最好将其重载为非成员函数。 ???? 5.为了遵照使用习惯,operator、operator 应定义为非成员函数。 ???? 6.重载 operator[] 之类的操作符, 应尽量提供 const 版本和非 const 版本。 ???? 7.关于将操作符定义为成员或非成员可参考以下建议: 操作符 建 议 所有一元操作符 成员 = () [] - 必须为成员 += -= /= *= ^= = != %= = = 成员 其它二元操作符 非成员 ???? 8.如果默认操作符已经可以施用于你的型别上, 则应尽量避免重载此操作符. 如 operator, 、operator(取地址) 等等. II. 重载 operator new ???? 1.为什么要重载 operator new ? [效率问题] 通常系统默认提供的分配器速度极慢, 而且分配小型对象时空间浪费严重. [改变行为] 默认的分配器失败时会抛出异常, 或许你想改变这种行为. ???? 2. operator new 的行为 [区分三个不同的 new] ???? new 操作符(new 表达式, new operator, new expression): 通常我们调用 X * pX = new X 时使用的就是这个操作符, 它由语言内建, 不能重载, 不能改变其行为. 它包括分配内存的 operator new 和调用构造函数的 placement new. ???? operator new :opeator new 是一个函数, void * operator new(size_t size) . 它分配指定大小的内存, 可以被重载, 可以添加额外的参数, 但第一个参数必须为 size_t. operator new 除了被 new operator 调用外也可以直接被调用: void * rawMem = operator new(sizeof(X)). ???? placement new : placement new 在一块指定的内存上使用构造函数, 包含头文件 new 之后也可以直接使用 placement new: X * pX = new (rawMem) X. [2] ???? 与 new operator 类似, 对于 delete operator, 也存在 operator delete: void operator delete(void *), 析构方法 pX-~X(). [operator new 的错误处理] ???? 默认的 operator

文档评论(0)

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

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

1亿VIP精品文档

相关文档