剑指offer(1) 赋值运算符函数

设计 operator = ,需要满足连续赋值以及自我赋值
类的设计者有责任设计operator = 运算符函数,因为只有类的设计者才知道对于这个操作背后的具体动作。
直接上代码:
#include<cstring>
#include<cstdio>
class CMYString
{
private:
/* data */
char* m_pData;
public:
CMYString(char* m_pData = nullptr);
CMYString(const CMYString& str);
~CMYString();
CMYString& operator = (const CMYString& str);
void Print();
};
CMYString::CMYString(char* pData )
{
if(pData == nullptr)
{
m_pData = new char[1];
m_pData[0] = '\0';
}
else
{
int length = strlen(pData);
m_pData = new char[length];
strcpy(m_pData,pData);
}
}
CMYString::~CMYString()
{
delete[] m_pData;
}
CMYString::CMYString(const CMYString &str)
{
int length = strlen(str.m_pData);
m_pData = new char[length + 1];
strcpy(m_pData,str.m_pData);
}
CMYString& CMYString::operator = (const CMYString& str)
{
if (this == &str)
{
return *this;
}
/*释放自身内存*/
delete []m_pData;
m_pData = nullptr;
m_pData = new char[strlen(str.m_pData) + 1];
strcpy(m_pData,str.m_pData);
return *this;
}
测试用例设计:
1.连续赋值 str3 = str2 = str1
2.自我赋值 str1 = str1
3.正常赋值 str2 = str1
浙公网安备 33010602011771号