如何實現賦值運算符函數

題目:爲下面的類添加賦值運算符函數:

class CMyString

{

public:

CMyString(char* pData = NULL);

CMyString(const CMyString& str);

~CMyString(void);


private:

char* m_pData;

};

賦值運算符函數就是重載賦值運算符,相信大家即使寫不對也可以大致寫出來,而如果在面試中遇到這種情況,那麼面試官考查的肯定是細節方面了,大致注意以下幾點:

1.返回值類型應爲該類的引用,因爲只有這樣才能連續賦值;

2.在函數結束前返回自身的引用;

3.在分配內存之前要釋放自身已有空間,否則將發生內存泄漏;

4.參數類型必須是常量引用;

5.判斷傳入實例與當前實例是否相同。


綜上,該函數應該寫成如下:

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);

return this;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章