剑指offer: 面试1——赋值运算符函数

剑指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;
}

猜你喜欢

转载自blog.csdn.net/MereX/article/details/89105919