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

  1. 简介
  2. demo
  3. this 关键字

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 就是指向当前实例的指针

欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 qinhan_shu@163.com

文章标题:C++ - 操作符 & 操作法重载

本文作者:QinHan

发布时间:2019-12-28, 18:25:26

最后更新:2020-02-20, 05:42:12

原始链接:https://qinhan.site/2019/12/28/cpp-operator/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏