其他分享
首页 > 其他分享> > 剑指offer(1) 赋值运算符函数

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

标签:char,CMYString,offer,pData,运算符,str,operator,赋值
来源: https://www.cnblogs.com/zhang-liubai/p/14855804.html