将常用的运算符作用于自定义的类,实现需要的功能。
示例:addr 是坐标,重载两个坐标的加法运算。
class addr { public: int x,y ; } ;
addr operator+ ( addr & a1, addr & a2 ) { addr result; result.x = a1.x + a2.x; result.y = a1.y + a2.y; return result; } |
addr a,b,c ;
c = a + b; c = operator+(a,b); |
N | 描述 |
---|---|
1 | 一般对自定义的类进行运算符重载 |
2 | 只能使用已有定义的运算符,不能创作新的运算符 |
3 | 不是所有运算符都可重载 |
4 | 保持运算符的目数(参数个数),“++ -- ()例外” |
5 | 保持运算符的优先级 |
6 | 保持运算符的左右结合特性 |
7 | 不能改变运算符对基本数据类型的操作方式 |
N | 描述 |
---|---|
1 | 重载 ++、-- 时需要改变原值,应“引用” |
2 | 重载单目 - 时,不应改变原值,应“传值” |
3 | 重载函数一般仍返回类型值,这样适用于连续运算 |
描述 | 单目参数 | 双目参数 |
---|---|---|
在类外部定义时,一般作为自定义类的友元,否则只能访问公共成员 | 1个 | 2个 |
在类内部定义时,则为类成员,本类实例作为一个参数(双目为左参数) | 0 | 1个 |
习惯形式 | 友元运算符函数调用形式 | 成员运算符函数调用形式 |
---|---|---|
a+b | operator+(a,b) | a.operator+(b) |
-a | operator-(a) | a.operator-() |
a++ | operator++(a,0) | a.operator++(0) |
成员函数 | 友元函数 |
---|---|
单目运算
+= -= /= *= &= != ~= %= >>= <<= = () [] -> |
其他 |
运算符 | 成员定义 | 友元定义 |
---|---|---|
++oj | ob.operator++() | operator++(cls & ob) |
ob++ | ob.operator++(int) | operator++(cls & ob,int) |
X[Y] | type operator[](type) | 无 |
X(Y) | type operator()(type list) | 无 |
标识符 | 描述 |
---|---|
= | |
() | |
[] | |
-> |
标识符 | 描述 |
---|---|
. | 类属关系运算符 |
* | 成员指针运算符 |
:: | 作用域分辨符 |
sizeof | 尺寸 |
?: | 三目运算符 |