深圳幻海软件技术有限公司 欢迎您!

C++核心编程 14(一)加号运算符重载

2023-03-25

对于内置数据类型,编译器知道该如何运算。当出现自定义数据类型时,编译器就不知道该怎么运算。运算符重载属于多态的一种。写法:typedef operator+(typedef &p)classC//创建自定义数据类型{public:C(){};//默认构造函数C(inta,

对于内置数据类型,编译器知道该如何运算。当出现自定义数据类型时,编译器就不知道该怎么运算。

运算符重载属于多态的一种。

写法:typedef operator+ (typedef & p)

  1. class C//创建自定义数据类型
  2. {
  3. public:
  4. C(){};//默认构造函数
  5. C(int a, int b) :m_A(a), m_B(b){};
  6. int m_A;
  7. int m_B;
  8. };

两者重载方式:

1.成员函数重载

  1. class C
  2. {
  3. public:
  4. C(){};//默认构造函数
  5. C(int a, int b) :m_A(a), m_B(b){};
  6. //加号运算符
  7. C operator+(C& p)
  8. {
  9. C temp;
  10. temp.m_A = this->m_A + p.m_A;
  11. temp.m_B = this->m_B + p.m_B;
  12. return temp;
  13. }
  14. int m_A;
  15. int m_B;
  16. };

成员函数测试案例:

  1. #include<iostream>
  2. using namespace std;
  3. class C
  4. {
  5. public:
  6. C(){};//默认构造函数
  7. C(int a, int b) :m_A(a), m_B(b){};
  8. //加号运算符
  9. C operator+(C& p)
  10. {
  11. C temp;
  12. temp.m_A = this->m_A + p.m_A;
  13. temp.m_B = this->m_B + p.m_B;
  14. return temp;
  15. }
  16. int m_A;
  17. int m_B;
  18. };
  19. void test01()
  20. {
  21. C p1(1, 1);
  22. C p2(1, 1);
  23. Person p3 = p1 + p2;
  24. cout << "p3的m_A:" << p3.m_A << endl;
  25. cout << "p3的m_B:" << p3.m_B << endl;
  26. }
  27. int main()
  28. {
  29. test01();
  30. system("pause");
  31. return 0;
  32. }

2.全局函数重载

  1. class C//创建自定义数据类型
  2. {
  3. public:
  4. C(){};//默认构造函数
  5. C(int a, int b) :m_A(a), m_B(b){};
  6. int m_A;
  7. int m_B;
  8. };
  9. //利用全局函数进行+运算符重载
  10. C operator+(C& p1, C& p2)
  11. {
  12. C temp;
  13. temp.m_A = p1.m_A + p2.m_A;
  14. temp.m_B = p1.m_B + p2.m_B;
  15. return temp;
  16. }

全局函数测试案例:

  1. #include<iostream>
  2. using namespace std;
  3. class C
  4. {
  5. public:
  6. C(){};//默认构造函数
  7. C(int a, int b) :m_A(a), m_B(b){};
  8. int m_A;
  9. int m_B;
  10. };
  11. //利用全局函数进行+运算符重载
  12. C operator+(C& p1, C& p2)
  13. {
  14. C temp;
  15. temp.m_A = p1.m_A + p2.m_A;
  16. temp.m_B = p1.m_B + p2.m_B;
  17. return temp;
  18. }
  19. void test01()
  20. {
  21. C p1(10, 10);
  22. C p2(10, 10);
  23. Person p3 = p1 + p2;
  24. cout << "p3的m_A:" << p3.m_A << endl;
  25. cout << "p3的m_B:" << p3.m_B << endl;
  26. }
  27. int main()
  28. {
  29. test01();
  30. system("pause");
  31. return 0;
  32. }

两者的区别:

成员函数+运算符重载的本质:C p3=p1.operator+(p2);

全局函数+运算符重载的本质:C p3=operator+(p1,p2);