赋值操作符的重载
当成员变量有指针的时候,会用到它。上代码:
#include <iostream>
using namespace std;
class Person
{
char* pName;
public:
Person(char* pN="noName")
{
cout<<"Constructing "<<pN<<"\n";
pName = new char[strlen(pN)+1];
if (pName)
strcpy(pName, pN);
}
Person(const Person& s)
{
cout<<"copy constructing "<<s.pName<<"\n";
pName = new char[strlen(s.pName)+1];
if (pName)
strcpy(pName, s.pName);
}
Person& operator=(Person& s)
{
cout<<"Assigning "<<s.pName<<"\n";
if (this==&s) //重要的判定,是不是给自己赋值。
return s;
delete[] pName;
pName = new char[strlen(s.pName)+1];
if (pName)
strcpy(pName, s.pName);
return *this;
}
~Person()
{
cout<<"Destructing "<<pName<<"\n";
delete[] pName;
}
};
任何类,C++都有一个默认的赋值操作符,用来进行对象本体的复制。重载了赋值操作符,默认的赋值操作符就不复存在。一般来说,赋值操作符是与拷贝构造函数和析构函数结对而行的。