Cpp_操作符重载
来源:互联网 发布:人工智能发展史 知乎 编辑:程序博客网 时间:2024/06/05 00:00
一、双目操作符的重载
1.计算类双目操作符
形如L#R的表达式会被编译器处理为形如L.operator#(R)的成员函数的调用,该函数的返回值即为表达式的值。
形如L#R的表达式也可以被编译器处理为形如::operator#(L,R)的全局函数的调用,该函数的返回值即为表达式的值。
2.赋值类双目操作符
表达式的值是一个左值,而且它就是左操作数本身。
左操作数不能是常量,右操作数可以是常量。
二、单目操作符的重载
1.计算类单目操作符
形如#O的表达式会被编译器处理为形如O.operator#()的成员函数的调用,该函数的返回值即为表达式的值。
形如#O的表达式也可以被编译器处理为形如::operator(O)的全局函数的调用,该函数的返回值即为表达式的值。
2.自增减单目操作符
1)前缀自增减:#O -> O.operator#() / ::operator# (O)
操作数不能是右值,返回值是操作数的引用。
2)后缀自增减:O# -> O.operator#(0) / ::operator# (O, 0)
操作数不能是右值,返回值是操作数自增减之前的副本。
三、其它操作符的重载
1.插入/提取操作符:<
四、操作符重载的限制
1.不是所有的操作符都能重载,下列操作符不能重载:
1)作用域限定操作符(::)2)直接成员访问操作符(.)3)直接成员指针解引用操作符(.*)4)条件操作符(?:)5)字节长度操作符(sizeof)6)类型信息操作符(typeid)
2.如果一个操作符所有的操作数都是基本类型,则该操作符无法被重载。
int operator+ (int a, int b) { return a - b; }int x = 1 + 1;cout << x << endl; // 0
3.操作符重载不会改变编译器预定义的优先级。
class Integer { ... };Integer const operator^ (Integer const& x, int y) { Integer z (1); for (int i = 0; i < y; ++i) z.m_i *= x.m_i; return z;}d = a + b ^ c; // d = (a + b) ^ c;
4.操作符重载无法改变操作数的个数。
double operator% (Integer const& opd) {
return opd.m_i / 100.0;
}
double x = 50%; // x : 0.5
5.无法通过操作符重载发明新的操作符。
Double const operator@ (Double const& a, Double const& b) {
return Double (sqrt (a.m_d * a.m_d + b.m_d * b.m_d));
}
Double c = 3.0 @ 4.0; // c : 5.0
- Cpp_操作符重载
- Cpp_函数重载
- c++重载操作符
- C++ 操作符重载
- 操作符重载浅析
- 操作符重载
- 10.8 操作符重载
- 操作符重载
- 操作符重载手册
- C#操作符重载
- 操作符重载手册
- 操作符重载手册
- 六操作符重载
- 操作符的重载
- C#操作符重载
- 多态,操作符重载
- 操作符重载集锦
- 重载操作符
- 智能指针初探
- Java直接插入排序
- python 变长参数
- The requested URL could not be retrieved
- GCC弱符号的一个应用示例
- Cpp_操作符重载
- 构建自己的代码库及软件开发不能是加工作坊--及一个简单的Linux C程序开发框架—linux-dev-framework
- 定位的一个yaffs2文件系统的bug
- CodeForces 608 A. Saitama Destroys Hotel(水~)
- 数据库备份了解
- Messenger(信使)
- 2015年第六届蓝桥杯C/C++程序设计本科B组省赛 牌型种数(结果填空)
- hdoj--5619--Jam's store(最小费用最大流)
- Redis与MySql结合