运算符重载
前言:该文章是作者学习C++过程中学习的知识点,希望通过记笔记的方式来激励自己的学习。如有冒犯,大佬勿喷。
运算符重载的基本概念
运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。运算符重载不能改变本来寓意,不能改变基础类型寓意
语法:
定义重载的运算符就像定义函数,只是该函数的名字是operator#,这里的#代表了被重载的运算符。函数的参数中参数个数取决于两个因素。
-
运算符是一元(一个参数)的还是二元(两个参数);
-
运算符被定义为全局函数(对于一元是一个参数,对于二元是两个参数)还是成员函数(对于一元没有参数,对于二元是一个参数-此时该类的对象用作左耳参数)
一个简单的案例
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class Person
{
public:
Person() {};
Person(int a, int b):m_A(a),m_B(b)
{};
//利用成员函数实现加号运算符重载
Person operator+(Person &p)
{
Person temp;
temp.m_A = this->m_A + p.m_A;
temp.m_B = this->m_B + p.m_B;
return temp;
}
int m_A;
int m_B;
};
//利用全局函数实现
Person operator+(Person &p1,Person &p2)
{
Person temp;
temp.m_A = p1.m_A + p2.m_A;
temp.m_B = p1.m_B + p2.m_B;
return temp;
}
void test01()
{
Person p1(10,11);
Person p2(20,22);
Person p3 = p1.operator+(p2);
Person p4 = operator+(p1,p2);
cout << "p3的mA=" << p3.m_A << "\np3的m_B=" << p3.m_B << endl;
cout << "p4的mA=" << p4.m_A << "\np4的m_B=" << p4.m_B << endl;
}
int main()
{
test01();
}
结果:
此案例中使用了成员函数与全局函数实现一个简单的+运算符重载,实现了Person对象成员对应量相加。这就实现了+的重载效果。