題目:爲下面的類添加賦值運算符函數:
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;
}