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

2021/6/6 18:27:54

本文主要是介绍剑指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



这篇关于剑指offer(1) 赋值运算符函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程