C++ - 操作符 & 操作法重载

C++ 学习笔记

C++ 操作符及其重载

简介

  • 操作符 可以看作是一种函数的简化写法
  • 操作符 不仅仅包括数学的(+,-,*,/ …),还有其他的例如:new, delete, &, +=, ::,指针的 ->
  • 操作符 重载就是重新定义这些操作符的算法函数

demo

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <string>
#include <iostream>

struct Vector2
{
float x, y;

Vector2(float x, float y)
: x(x), y(y) {}


// 如果没有运算符重载,可能两个向量相加的写法就是这样的
Vector2 Add(const Vector2& other) const
{
// 也可以写成
// this 其实也是一个关键字
// return *this + other;
// return operator+(other);
return Vector2(x + other.x, y + other.y);
}

// 如果没有运算符重载,可能两个向量相乘的写法就是这样的
Vector2 Multiply(const Vector2& other) const
{
// 也可以写成
// return *this * other;
// return operator*(other);
return Vector2(x * other.x, y * other.y);
}

// =====运算符重载部分=====
Vector2 operator+(const Vector2& other) const
{
return Vector2(x + other.x, y + other.y);
}

Vector2 operator*(const Vector2& other) const
{
return Vector2(x * other.x, y * other.y);
}

bool operator==(const Vector2& other) const
{
return x == other.x && y == other.y;
}

bool operator!=(const Vector2& other) const
{
return !(*this == other);
}
};

// 重载 ostream 的 << 的运算符
std::ostream& operator<<(std::ostream& stream, const Vector2& other)
{
stream << other.x << " , " << other.y;
return stream;
}


// 程序的主函数
int main()
{
Vector2 pos(4.0f, 4.0f);
Vector2 speed(0.5f, 1.5f);
Vector2 powerUp(0.5f, 1.5f);

// 阅读起来很麻烦
Vector2 result = pos.Add(speed.Multiply(powerUp));
Vector2 result1 = pos + speed * powerUp;

if (result == result1)
{

}

std::cout << result << std::endl;

return 0;
}

this 关键字

  • 在上面的操作符重载的栗子中,有出现了 this 关键字,就在这儿稍微记录一下吧
  • this 关键字只有在 class 的成员函数 中出现,this 就是指向当前实例的指针