- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- libcap-可实现OAM.doc
- LinuxOpenSUSE安装Mplayer.docx
- Linuxffmpge视频转码mp4.docx
- Lisp编程举例.doc
- LM3886中文资料.doc
- LME采用国际会员资格制.doc
- LoadRunner如何建立关联.docx
- Loadrunner参数化设置中的DataWizard.doc
- Loadrunner对ORACLE进行参数化.docx
- LoadRunner错误集锦.doc
- 兼并与收购 导论:从若干案例讲起.ppt
- 【广告策划-】2010创意户外广告.ppt
- 数控加工工艺与设备第七章 数控线切割加工工艺及设备 (NXPowerLite).ppt
- 空调系统水管设计讲稿.ppt
- Easy Cluster - 4Phase:简单的集群-相位.ppt
- Social Network Capital, Economic Mobility and Poverty Traps社会网络资本,经济的流动性和贫困陷阱.ppt
- 大学生职业生涯规划 第二讲 认识环境.ppt
- 提升管理水平_减少用工风险.ppt
- 两高《关于办理危害食品安全刑事案件适用法律若问题的解释》.ppt
- 国际商务谈判第五章 商务谈判前的准备.pptx
文档评论(0)