前言
\(operator\),即c++的重载运算符。
可以理解为定义了一个符号的运算规则,用来更方便处理高精度等特定运算。
使用须知
\(=\)赋值运算符、\([]\)下标运算符、\(()\)函数调用运算符、\(->\)成员访问运算符。
只能作为类成员重载,不能作为友元函数。
还有,重载后无优先级,可以打括号。
Finally,你不应该重载 \(\&\&\;\|\|\;\&\) 运算符,他们在程序中有重要的作用。
使用
你应该把他定义在结构体里,他不会对结构体外的运算符产生影响。
1 2 3
| {结构体名} operator {运算符}({运算符}){ {重载规则} }
|
例题
单讲不好讲,上一道例题:高精度a+b
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #include <bits/stdc++.h> using namespace std; struct high { int len, o[1005]; void clear() { len = 0; memset(o, 0, sizeof(o)); } void in() { char ch[1005]; scanf("%s", ch), len = strlen(ch); for (int i = 0; i < len; i++) o[len - i] = (ch[i] - '0'); } void print() { for (int i = len; i >= 1; i--) printf("%d", o[i]); } }; high operator+(high a, high b) { high c; c.clear(); while (c.len <= a.len || c.len <= b.len) { c.len++; c.o[c.len] += (a.o[c.len] + b.o[c.len]); c.o[c.len + 1] += (c.o[c.len] / 10); c.o[c.len] %= 10; } while (!c.o[c.len] && c.len > 1) c.len--; return c; } int main() { high x, y; x.in(), y.in(); high z = x + y; z.print(); }
|
应该好理解。