C++运算符重载

运算符重载是C++对象化编程的一个重要特征,它让类和对象可以自定义运算符的行为。本文将通过示例介绍C++中运算符重载的相关用法。

一、重载基本概念

C++允许重新定义类的运算符行为,常见的如+、-、*、/等。例如实现矩阵类:

# c++ www.itzhimei.com 代码演示
class Matrix {
public:
  // 矩阵加法
  Matrix operator+(const Matrix& m) {
    // 加法实现
  } 
};

Matrix m1, m2, m3; 
m3 = m1 + m2; // 调用重载的+运算符

二、重载方式

  1. 成员函数:将运算符作为成员函数重载
# c++ www.itzhimei.com 代码演示
class Point {
  int x, y;
public:
  Point operator+(const Point& p) {
    // 两个点的加法 
  }  
};
  1. 全局函数:
# 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++面向对象编程的简洁性和直观性。但也需要谨慎使用,保持语义一致并避免滥用。