C++ 运算符重载
概念:对已有的运算符进行定义,赋予其另一种功能,以适应不同的数据类型。
2种重载方式:
一、成员函数运算符重载
重载 + 号
class Persion
{
public:
int m_A;
int m_B;
Persion operator+(Persion& p)
{
Persion temp;
temp.m_A = this->m_A + p.m_A;
temp.m_B = this->m_B + p.m_B;
return temp;
}
};
void test01()
{
Persion p1;
p1.m_A = 10;
p1.m_B = 10;
Persion p2;
p2.m_A = 10;
p2.m_B = 10;
Persion p3 = p1 + p2; // 本质是:Persion p3 = p1.operator+(p2);
cout << "p3.m_A = " << p3.m_A << " p3.m_B = " << p3.m_B << endl;
}
二、全局函数运算符重载
#include <iostream>
#include <string>
using namespace std;
class Persion
{
friend Persion operator+(Persion& p1, Persion& p2);
public:
int m_A;
int m_B;
};
Persion operator+(Persion& p1, Persion& p2)
{
Persion temp;
temp.m_A = p1.m_A + p2.m_A;
temp.m_B = p1.m_B + p2.m_B;
return temp;
}
int main()
{
Persion p1;
p1.m_A = 10;
p1.m_B = 10;
Persion p2;
p2.m_A = 10;
p2.m_B = 10;
Persion p3 = p1 + p2; // 本质是:Persion p3 = operator+(p1,p2);
cout << "p3.m_A = " << p3.m_A << " p3.m_B = " << p3.m_B << endl;
system("pause");
return 0;
}
小知识:
运算符重载也可以发生函数重载
#include <iostream>
#include <string>
using namespace std;
class Persion
{
friend Persion operator+(Persion& p1, Persion& p2);
public:
int m_A;
int m_B;
};
Persion operator+(Persion& p1, Persion& p2)
{
Persion temp;
temp.m_A = p1.m_A + p2.m_A;
temp.m_B = p1.m_B + p2.m_B;
return temp;
}
Persion operator+(Persion& p1, int num)
{
Persion temp;
temp.m_A = p1.m_A + num;
temp.m_B = p1.m_B + num;
return temp;
}
int main()
{
Persion p1;
p1.m_A = 10;
p1.m_B = 10;
Persion p2;
p2.m_A = 10;
p2.m_B = 10;
Persion p3 = p1 + 10;
cout << "p3.m_A = " << p3.m_A << " p3.m_B = " << p3.m_B << endl;
system("pause");
return 0;
}