C++ 中的运算符重载

我们可以重定义或重载大部分 C++ 内置的运算符。这样,您就能使用自定义类型的运算符。
重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。
Box operator+(const Box&);
声明加法运算符用于把两个 Box 对象相加,返回最终的 Box 对象。大多数的重载运算符可被定义为普通的非成员函数或者被定义为类成员函数。如果我们定义上面的函数为类的非成员函数,那么我们需要为每次操作传递两个参数,如下所示:
Box operator+(const Box&, const Box&);
注意:重载非成员函数属于对象,不属于类,故不用写类范围标识符

下面是示范代码

  1. #include <iostream>
  2. using namespace std;
  3. class Box
  4. {
  5. public:
  6. Box() :len(1), wid(1), hig(1){ cout << "创建一个Box,"; }
  7. Box(int x, int y, int z);
  8. ~Box();
  9. Box operator+( const Box& b){
  10. Box tempBox;
  11. tempBox.hig = this->hig + b.hig;
  12. tempBox.wid = this->wid + b.wid;
  13. tempBox.len = this->len + b.len;
  14. return tempBox;
  15. };
  16. //让定义的非成员函数去访问私有数据
  17. friend Box& operator-(const Box& a, const Box& b);
  18. void display() {
  19. cout <<"长宽高为" << len <<","<<wid <<"," << hig << endl;
  20. }
  21. private:
  22. int len;
  23. int wid;
  24. int hig;
  25. };
  26. Box::Box(int x, int y, int z):len(x),wid(y),hig(z)
  27. {
  28. cout << "创建一个Box,";
  29. }
  30. Box::~Box(){}
  31. //重载非成员函数属于对象,不属于类,故不用写类范围标识符
  32. Box& operator-(const Box& a, const Box& b) {
  33. Box tempBox;
  34. tempBox.hig= a.hig - b.hig;
  35. tempBox.wid = a.wid - b.wid;
  36. tempBox.len = a.len - b.len;
  37. return tempBox;
  38. }
  39. int main()
  40. {
  41. Box box1(5,5,5);
  42. box1.display();
  43. Box box0;
  44. box0.display();
  45. Box newBox=box1 + box0;
  46. newBox.display();
  47. newBox = newBox - box0;
  48. newBox.display();
  49. }