重载赋值操作符=
- 赋值运算符重载用于对象数据的复制
- operator= 必须重载为成员函数
- 重载函数原型为:类型 & 类名 :: operator= ( const 类名 & ) ;
案例:完善Name类,支持=号操作。
结论:
- 先释放旧的内存
- 返回一个引用
- =操作符 从右向左
#include<iostream>
using namespace std;
class Name
{
public:
Name(const char *myp)
{
len = strlen(myp);
p = (char*)malloc(len+1); //'0'分配内存
strcpy(p,myp);
}
//手工写copy:深拷贝
Name(const Name &obj1)
{
len = obj1.len;
p = (char*)malloc(len+1);
strcpy(p,myp);
}
public:
Name &operator=(Name &obj1)
{
//1 释放旧内存obj3
if(this->p != NULL)
{
delete[]p;
len = 0;
}
//2 分配obj1大小的内存
this->len = obj1.len;
this->p = new char[len + 1];
//3 复制obj1
strcpy(p,obj1.p);
return *this;
}
~Name() //析构
{
if(p!=NULL)
{
free(p);
p = NULL;
len = 0;
}
}
private:
int len;char *p;
};
void main()
{
Name obj1("adsad");
Name obj2 = obj1;
Name obj3("obj3");
obj3 = obj1;
//obj3.operator=(obj1);
//operator=(Name &obj1);
//链式操作
obj3 = obj2 = obj1;
//obj2.operator=(obj3);
//obj1 = void;
system("pause");
}