C++运算符重载
C++运算符重载是C++中一个非常重要的概念,很多初学者(包括我)在刚开始学习的时候非常害怕,甚至讨厌(也许是恶心)。但是,不得不说的是,它真的很重要,学会之后很方便(ZhuangBi)。
加号运算符重载
加号是一个典型的双目运算符(需要两个操作数),加号前一个,加号后一个。实现加号运算符重载有两种方式:1.类成员方法实现、2.全局方法实现
谈一下我对加号运算符重载的理解,因为如果不理解原理,就会觉的运算符重载语法有点(变态),如果只想知道实现方法的请直接跳到代码部分。
在没有使用运算符重载之前,我们实现两个自定义类型相加通常都是使用类成员函数实现的。比如下图这种:

其中 p1.addPerson(p2) 就等价于 p1 + p2
而加号的运算符重载也是一个函数,不过名字比较奇怪而已:operator+()
可以理解为,两个对象相加时等价于 p1.operator+(p2) 然后经过编译器优化后,可以简写为 p1 + p2。所以在成员方法实现运算符重载时仅仅需要传入一个参数(另外一个是隐藏的this指针)。
1. 类成员方法实现
1 #include <iostream>
2 using namespace std;
3
4 class Person {
5 public:
6 Person();
7 Person(int val);
8 Person operator+(const Person& p);//运算符重载 函数定义
9 private :
10 int m_age;
11 };
12
13 int main() {
14 Person p1;
15 Person p2;
16 Person p3 = p1 + p2;//重载后的效果
17 return 0;
18 }
19
20 Person::Person() :m_age(10) {
21 cout << "无参构造函数" << endl;
22 }
23 Person::Person(int val) : m_age(val) {
24 cout << "有参构造函数" << endl;
25 }
26 Person Person:: operator+(const Person& p) {//运算符重载 实现
27 Person tmp;
28 tmp.m_age = this->m_age + p.m_age;
29 return tmp;
30 }