作用:实现两个自定义类型相加
对于内置数据类型,编译器知道如何进行运算
class Person
{
public:
Person operator+ (Person &p)
{
Person 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;
}
Person operator+ (Person &p1,Person &p2)
{
Person temp;
temp.m_a=p1.m_a+p2.m_a;
temp.m_b=p1.m_b+p2.m_b;
return temp;
}
Person p3=p1+p2;
//成员函数重载本质调佣
Person p3=p1.operator+(p2);
//全局函数重载 本质调用
Person p3=operator+(p1,p2);
赋值运算符重载
class Person
{
public:
Person(int age)
{
m_age=new int(age);
}
~Person()
{
if(m_age!=NULL)
{
delete m_age;
m_age=NULL;
}
}
int *m_age;
}
Person p1(18);
Person p2(20);
p2=p1;//赋值操作
//重载 赋值运算符
void 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);
}
void operator==(Person &p)
{
if(this->m_name==p.m_name && this->m_age == p.m_age)
{
return true;
}
return false;
}



