面试题 1,赋值运算函数 P41


这是一道关于字符串封装类的题,涉及到运算符的重载。
要注意以下四点:
1. 传入参数必须为const;
2. 因为是赋值运算符,存在连续赋值的情况,因此返回值要为引用值;(具体原因下面会探讨)
3. 释放已有内存;
4. 判断要赋值与被赋值是否实际上是同一个实例。
代码如下:
CMyString& CMyString::operator =(const CMyString &oriString){ if(this == &oriString){ //The same object return *this; } delete m_pData; m_pData = new char[strlen(oriString.m_pData) + 1]; strcpy(m_pData, oriString.m_pData); return *this; }
此代码为自己编写,对照答案修改后的代码。
错误注意点:
this在C++的类中是一个指针,比较时直接使用 this。
返回值定义为引用,但是return的时候依然是返回一个值,需要使用*来取值,不要把引用和地址混淆。
strlen不会计算最后的\0位,因此分配内存需要考虑+1
------------------------------------------------
Felix原创,转载请注明出处,感谢博客园!
posted on 2013-11-21 20:46 Felix Fang 阅读(155) 评论(0) 收藏 举报
浙公网安备 33010602011771号