运算符重载概念:对已有的运算符进行重新定义,赋予其另一种功能,以适应不同的数据类型
c++编译器至少给一个类添加4个函数
1.默认构造函数(无参,函数体为空)
2.默认析构函数(无参,函数体为空)
3.默认拷贝构造函数.对属性进行拷贝。
4.赋值运算符operator=,对属性进值只拷贝
如果类中有属性指向堆区,做赋值操作时也会出现深拷贝问题。
重载一个函数的条件是:该函数必须在参数的参数个数和参数类型上与其他同名函数所相同。
示例:
#include<iostream>using namespace std;class Person{public:Person(int age){m_Age = new int(age);}//赋值运算符重载Person& operator=(Person& p)//这里的类型必须加上引用类型{//编译器提供的浅拷贝//m_Age=p.m_Age; //这样操作会造成两个指针共用一个内存空间。//应该先判断是否有属性在堆区,如果有先释放干净,在进行深拷贝。if(m_Age!=NULL){delete m_Age;m_Age=NULL;}//深拷贝。m_Age= new int(*p.m_Age);//返回对象本身。return *this;}~Person(){if(m_Age!=NULL){delete m_Age;m_Age=NULL;}}int *m_Age;};void show(){Person p1(18);Person p2(20);Person p3(30);p3=p2=p1;cout<<"p1 ="<<*p1.m_Age<<endl;cout<<"p2 ="<<*p2.m_Age<<endl;cout<<"p3 ="<<*p3.m_Age<<endl;}int main(){show();return 0;}
