对于内置数据类型,编译器知道该如何运算。当出现自定义数据类型时,编译器就不知道该怎么运算。
运算符重载属于多态的一种。
写法: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);