题目:为下面的类添加赋值运算符函数:
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;
}