C++中的重载运算
来源:互联网 发布:想找淘宝兼职工作 编辑:程序博客网 时间:2024/05/22 08:16
重载运算
当运算符被应用于类类型的对象时,C++语言允许我们为其指定新的含义,重新定义该运算符的含义。
基本概念
1)重载运算符本质上还是一个函数。因此也有函数相应的各种元素结构。
函数名:由关键字operator 和对应的运算符组成。
参数:参数数量和运算符作用的运算符对象个数一样多,成员运算符函数的左侧运算对象隐式地绑定到this上。
2)可以重载大多数但并不是全部大运算符。不能重载的运算符有:( :: .* . ? : )。
3)只能重载已有的运算符,不能发明新的运算符。
4)对于一个运算符函数来说,它要么是类的成员,要么至少含有一个类类型参数。
5)通常情况下,不应该重载逗号、取址、逻辑与、逻辑或这几种运算符。
6)在定义重载运算符时,应尽量使用与内置类型一致的含义。
7)对于将运算符作为成员还是非成员函数,可以考虑一下几方面:a)赋值、下标、调用、成员访问箭头运算符必须是成员;b)复合赋值运算符一般作为成员,但非必须;c)改变运算对象状态的运算符或者和给定类型密切相关的运算符,通常应该是成员;d)具有对称性的运算符可能转换任意一端的运算对象,通常为非成员。
输入输出运算符
1)输入输出运算符必须是非成员函数。
2)通常情况下,输出运算符的第一个形参是一个非常量ostream对象的引用,第二个形参一般是一个常量的引用。
3)通常情况下,输入运算符的第一个形参是将要读取流的引用,第二个形参是将要读入到的对象的引用;输入运算符需要有处理输入失败的情况。
算术运算符
通常情况下将算术运算符定义成非成员能函数,允许左侧或者右侧运算对象进行转换,形参通常是常量的引用。
关系运算符
1)通常情况下将关系运算符定义成非成员能函数,允许左侧或者右侧运算对象进行转换,形参通常是常量的引用。
2)对于相等运算符,只有类类型中的所有数据成员都相等才认为两个对象相等。
3)通常关系运算符应该:a) 定义顺序关系,令其与关联容器中对关键字的要求一致;b)如果类同时也含有==运算符,则定义一种关系令其与==保持一致。
赋值运算符
1)不论形参的类型是什么嘛,赋值运算符都必须定义为成员函数。
2)复合赋值运算符尽量定义成成员函数,为了与内置类型的复合赋值保持一直,通常返回类型为左侧运算对象的引用。
下标运算符
1)下标运算符必须是成员函数。
2)下标运算符返回的对象通常是所访问元素的引用,可以放在赋值运算符的任何一端,因此最好定义常量和非常量版本的两种下标运算符。
递增和递减运算符
1)建议将这两种运算符定义为成员函数。
2)为和内置类型一致,最好定义前置版本和后置版本两种运算符。
0 0
- 【C++】String类中的运算符重载
- C++中的重载运算
- C++-运算符重载
- [C++]重载运算符
- C#:运算符重载
- c++-++运算符重载
- C++:重载运算符
- 运算符重载(C++)
- [c++]运算符重载
- 【C++】运算符重载
- C++--------------------------------------------运算符重载
- C#:运算符重载
- C++:运算符重载
- C++:运算符重载
- C#:运算符重载
- [C++]运算符重载
- 【c++】运算符重载
- C++:运算符重载
- Vmware vSphere 出现 unable to connect to the mks问题的解决办法
- 调整数组顺序让奇数位于偶数前面
- 数组元素排序:选择法&冒泡法
- 2017-4-5
- unreachable code
- C++中的重载运算
- 当心僵尸:过时Linux内核的安全风险
- 2017年全国计算机软件水平考试报名入口网址V1.0(小虎整理)
- java web 文件上传的总结
- 关于没有SD卡的手机在获取外部存储时的问题
- swustoj(判断(0317))
- JSP import JavaBean 无法解析导入
- 最长回文(manacher算法)(fromHDU)
- 编程语言——深入而形象化的理解编程