剑指offer: 面试1——赋值运算符函数
题目:如下为类型为CMyString的声明,请为该类型添加赋值运算符函数
class CMyString
{
pubilc:
CMyString(char * pData = NULL);
CMyString(const CMyString &str);
~CMyString(void);
private:
char * m_pData;
};
#include <iostream>
#include <cstring>
using namespace std;
class CMyString
{
public:
CMyString(char * pData = NULL);
CMyString(const CMyString &str);
```
CMyString & operator=(const CMyString &str);
~CMyString(void);
char * m_pData;
```
};
CMyString::CMyString(char *pData)
{
if(pData)
{
m_pData=new char[strlen(pData)+1]; //如果不加pData为空判断,该位置会数组越界,从而程序崩溃
strcpy(m_pData,pData);
}
else
{
m_pData=new char[1];
m_pData[0]='\0';
}
}
CMyString::CMyString(const CMyString &str)
{
m_pData=new char[strlen(str.m_pData)+1];
strcpy(m_pData,str.m_pData);
}
CMyString::~CMyString()
{
}
/*
//第一种
CMyString& CMyString::operator=(const CMyString &str)
{
if(&str == this)
return *this;
// delete [] m_pData;
// m_pData = NULL;
m_pData= new char[strlen(str.m_pData)+1];
strcpy(m_pData,str.m_pData);
return *this;
}
*/
CMyString& CMyString::operator=(const CMyString &str)
{
if(&str != this)
{
CMyString strtemp(str);
char *temp = m_pData;
m_pData=strtemp.m_pData;
strtemp.m_pData = temp;
}
return *this;
}
void Print(const CMyString &str)
{
cout<<str.m_pData;
}
int main()
{
char *temp=new char[10];
cout<<"Put str"<<endl;
cin>>temp;
CMyString my = CMyString(temp);
//Print(my);
CMyString cp,cp1;
cp1=cp=my;
Print(cp);
Print(cp1);
return 0;
}