运算符重载概念:对已有的运算符进行重新定义,赋予其另一种功能,以适应不同的数据类型

    c++编译器至少给一个类添加4个函数
    1.默认构造函数(无参,函数体为空)
    2.默认析构函数(无参,函数体为空)
    3.默认拷贝构造函数.对属性进行拷贝。
    4.赋值运算符operator=,对属性进值只拷贝

    如果类中有属性指向堆区,做赋值操作时也会出现深拷贝问题。

    重载一个函数的条件是:该函数必须在参数的参数个数和参数类型上与其他同名函数所相同。

    示例:

    1. #include<iostream>
    2. using namespace std;
    3. class Person
    4. {
    5. public:
    6. Person(int age)
    7. {
    8. m_Age = new int(age);
    9. }
    10. //赋值运算符重载
    11. Person& operator=(Person& p)//这里的类型必须加上引用类型
    12. {
    13. //编译器提供的浅拷贝
    14. //m_Age=p.m_Age; //这样操作会造成两个指针共用一个内存空间。
    15. //应该先判断是否有属性在堆区,如果有先释放干净,在进行深拷贝。
    16. if(m_Age!=NULL)
    17. {
    18. delete m_Age;
    19. m_Age=NULL;
    20. }
    21. //深拷贝。
    22. m_Age= new int(*p.m_Age);
    23. //返回对象本身。
    24. return *this;
    25. }
    26. ~Person()
    27. {
    28. if(m_Age!=NULL)
    29. {
    30. delete m_Age;
    31. m_Age=NULL;
    32. }
    33. }
    34. int *m_Age;
    35. };
    36. void show()
    37. {
    38. Person p1(18);
    39. Person p2(20);
    40. Person p3(30);
    41. p3=p2=p1;
    42. cout<<"p1 ="<<*p1.m_Age<<endl;
    43. cout<<"p2 ="<<*p2.m_Age<<endl;
    44. cout<<"p3 ="<<*p3.m_Age<<endl;
    45. }
    46. int main()
    47. {
    48. show();
    49. return 0;
    50. }