对于内置数据类型,编译器知道该如何运算。当出现自定义数据类型时,编译器就不知道该怎么运算。
运算符重载属于多态的一种。
写法:typedef operator+ (typedef & p)
class C//创建自定义数据类型
{
public:
C(){};//默认构造函数
C(int a, int b) :m_A(a), m_B(b){};
int m_A;
int m_B;
};
两者重载方式:
1.成员函数重载
class C
{
public:
C(){};//默认构造函数
C(int a, int b) :m_A(a), m_B(b){};
//加号运算符
C operator+(C& p)
{
C 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;
};
成员函数测试案例:
#include<iostream>
using namespace std;
class C
{
public:
C(){};//默认构造函数
C(int a, int b) :m_A(a), m_B(b){};
//加号运算符
C operator+(C& p)
{
C 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;
};
void test01()
{
C p1(1, 1);
C p2(1, 1);
Person p3 = p1 + p2;
cout << "p3的m_A:" << p3.m_A << endl;
cout << "p3的m_B:" << p3.m_B << endl;
}
int main()
{
test01();
system("pause");
return 0;
}
2.全局函数重载
class C//创建自定义数据类型
{
public:
C(){};//默认构造函数
C(int a, int b) :m_A(a), m_B(b){};
int m_A;
int m_B;
};
//利用全局函数进行+运算符重载
C operator+(C& p1, C& p2)
{
C temp;
temp.m_A = p1.m_A + p2.m_A;
temp.m_B = p1.m_B + p2.m_B;
return temp;
}
全局函数测试案例:
#include<iostream>
using namespace std;
class C
{
public:
C(){};//默认构造函数
C(int a, int b) :m_A(a), m_B(b){};
int m_A;
int m_B;
};
//利用全局函数进行+运算符重载
C operator+(C& p1, C& p2)
{
C temp;
temp.m_A = p1.m_A + p2.m_A;
temp.m_B = p1.m_B + p2.m_B;
return temp;
}
void test01()
{
C p1(10, 10);
C p2(10, 10);
Person p3 = p1 + p2;
cout << "p3的m_A:" << p3.m_A << endl;
cout << "p3的m_B:" << p3.m_B << endl;
}
int main()
{
test01();
system("pause");
return 0;
}
两者的区别:
成员函数+运算符重载的本质:C p3=p1.operator+(p2);
全局函数+运算符重载的本质:C p3=operator+(p1,p2);