运算符重载是C++对象化编程的一个重要特征,它让类和对象可以自定义运算符的行为。本文将通过示例介绍C++中运算符重载的相关用法。
一、重载基本概念
C++允许重新定义类的运算符行为,常见的如+、-、*、/等。例如实现矩阵类:
# c++ www.itzhimei.com 代码演示
class Matrix {
public:
// 矩阵加法
Matrix operator+(const Matrix& m) {
// 加法实现
}
};
Matrix m1, m2, m3;
m3 = m1 + m2; // 调用重载的+运算符
二、重载方式
- 成员函数:将运算符作为成员函数重载
# c++ www.itzhimei.com 代码演示
class Point {
int x, y;
public:
Point operator+(const Point& p) {
// 两个点的加法
}
};
- 全局函数:
# c++ www.itzhimei.com 代码演示
Point operator+(const Point& p1, const Point& p2) {
// 函数体
}
三、常见的重载运算符
- 算术:+、-、*、/、%等
- 赋值:=、+=、-=等
- 比较:>、<、==等
- 逻辑:!、&&、||
- 下标:[]
例如Vector重载[]用以访问元素:
# c++ www.itzhimei.com 代码演示
class Vector {
// ...
public:
double& operator[](int i) {
return data[i];
}
double operator[](int i) const {
return data[i];
}
};
Vector v;
v[1] = 5.0; // 调用非const版本
四、重载时的注意事项
- 运算 priority 要保持一致
- 尽量保持与内置类型一致的语义
- 针对不修改对象状态的操作,声明为const overload
总结来说,运算符重载可以大大提高C++面向对象编程的简洁性和直观性。但也需要谨慎使用,保持语义一致并避免滥用。