《剑指offer》 学习笔记(一)
2016-01-22 19:45
309 查看
面试题一:赋值运算符函数
题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数
class CMyString { public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(void); private: char* m_pData; };
经典解法:
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; }
这题考察如下几个点:
为了实现连续赋值,必须返回实例自身的引用把传入的参数的类型声明为常量引用
释放实例自身已有的内存
判断传入的参数和当前的实例是否为同一个实例
PS:为了实现连续赋值,必须返回实例自身的引用
在《Effective C++》中,这个问题也被提到,参考条款10:令 operator= 返回一个 reference to *this。关于赋值,我们可以把他写成连续的形式,例如:
int x,y,z;
x=y=z=15;
赋值采用右结合律,上述连锁赋值被解析为:
x=(y=(z=15));
我们可以发现即使不采用引用,代码一样可以通过代码一样可以通过。
所以说赋值运算符重载要返回引用,应该是用于类似 (x=y)=z这样的再次对左值进行写操作的表达式
这个协议适用于所有赋值相关运算符。
相关文章推荐
- jQuery选择器下
- 《剑指offer》——数字在排序数组中出现的次数
- 【JSTL】-EL表达式
- ztreeDeptSelect 基于jquery和ztree的部门选择插件
- 【HTML 未完】牛客网试题总结1
- [LeetCode24]Swap Nodes in Pairs
- Angularjs scope
- 《剑指offer》-替换空格
- 《剑指offer》-二维数组中的查找
- javascript异步实现
- 【CSS 未完】牛客网试题总结1 ?
- Jquery数组和对象操作
- Bootstrap表单之按钮专题
- 网页制作学习1----初步认识javascript和html
- jQuery form插件的使用--ajaxForm()和ajaxSubmit()的可选参数项对象
- web学习之路—H5(二)
- Bootstrap表单
- Codeforces Round #256 (Div. 2/C)/Codeforces448C_Painting Fence(分治)
- css垂直居中
- 一个非常棒的jQuery 评分插件--好东西要分享