C++割付演算子関数

4031 ワード

クラスに代入演算子関数を追加するには、次の手順に従います.
タイプ定義
class CMyString

{

public:

    CMyString(char *pData = NULL);

    CMyString(const CMyString &str);

    ~CMyString(void);



    CMyString &operator=(const CMyString &);



private:

    char *m_pData;

};

要点:
1.戻り値タイプはこのタイプの参照であり、関数が終わる前にインスタンス自身の参照を返します.
2、入力したパラメータを定数参照として宣言するかどうか【const CmyString&str】;
3、自分の既存のメモリを解放するかどうか、さもなくば“メモリが漏れます”をもたらします;
4.パラメータが現在の例と同じ対象であるか否かを判断する.
解法:
/*

         C++      

*/

CMyString &CMyString::operator=(const CMyString &str)

{

    //                 

    if (this == &str)

        return *this;



    //     

    delete []m_pData;

    m_pData = NULL;



    //      

    m_pData = new char[strlen(str.m_pData) + 1];

    strcpy(m_pData,str.m_pData);



    //  :  *this

    return *this;

}







/*

         C++      

*/

CMyString &CMyString::operator=(const CMyString &str)

{

    if (this != &str)                   //          

    {

        CMyString strTemp(str);



        char *pTemp = strTemp.m_pData;  //           

        //strTemp.m_pData       ,                 

        strTemp.m_pData = m_pData;      

        m_pData = pTemp;                //       

    }   //    strTemp     ,  strTemp     pTemp   



    return *this;

}