重载运算符
可重载运算符/不可重载运算符
下面是可重载的运算符列表:
下面是不可重载的运算符列表:
- . 成员访问运算符
.*
,->*
成员指针访问运算符- :: 域运算符
- sizeof 长度运算符
- ?: 条件运算符
#
预处理符号
我们将以矩阵为例示例重载运算符。
双目算术运算符
1 | matrix operator*(matrix x,matrix y) |
关系运算符
1 | bool operator==(const matrix x,const matrix y) |
逻辑运算符
由于重载逻辑运算符过于毒瘤而被隐藏
1 | //bool operator!(matrix x) |
单目运算符
1 | matrix operator-(matrix x) |
自增自减运算符
1 | matrix& operator++(matrix &x) |
位运算符
1 | matrix operator~(matrix x) |
赋值运算符
1 | matrix& operator*=(matrix &x,matrix y) |
重载函数
对于C++中预制的函数,有的函数由于固定了类型,比如pow在<math.h>中的返回值类型为double,传的两个参数类型也为double,那么如果我们使用int进行操作,在某些编译选项下(例如-lm),可能会CE;max和min函数在STL中的定义返回值类型为1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
遇到这种情况,我们就需要重载函数,有的人可能称这种为手写函数,但实际上我们写数据结构之类的函数是手写函数没问题,但max或min这种实际上是重载函数。
对于矩阵重载pow函数的例子:
```cpp
matrix pow(matrix a,int k)
{
matrix ans;
ans.init();
while(k)
{
if(k&1)ans*=a;
a*=a;
k>>=1;
}
return ans;
}
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
赏
使用支付宝打赏
使用微信打赏
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏