将常用的运算符作用于自定义的类,实现需要的功能。
示例: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 | 尺寸 |
| ?: | 三目运算符 |