[互联网面试笔试汇总C/C++-9] 实现赋值运算符函数-剑指offer
题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数。
class CMyString
{
public:
CMyString(char* pData = NULL);
CMyString(const CMyString & str);
~CMyString(void);
private:
char* m_pData;
};
分析:
赋值运算符要注意以下四点:
1.把返回值的类型声明为该类型的引用。
2.把传入的参数的类型声明为常量引用。
3.释放实例自身已有的内存。
4.判断传入的参数和当前的实例是否是同一个实例。
根据以上几点要求,我们可以写出如下赋值运算符。
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;
}
对于初级C++程序员能写出上述函数就OK了,但是如果要作为一个高级C++程序员的话,则需要考虑更多的安全性问题。
例如上面代码中的new部分要是内存不足则会抛出异常,此时实例的m_pData已经被删除,而新的内存又没申请到,就会导致数据丢失,所以我们可以采用下面的代码来保证代码的安全性。
CMyString & CMyString::operator = (const CMyString & str)
{
if(this != & str)
{
CMyString tmp(str);
char* pTmp = tmp.m_pData;
tmp.m_pData = m_pData;
m_pData = pTmp;
}
return *this;
}
[互联网面试笔试汇总C/C++-9] 实现赋值运算符函数-剑指offer的更多相关文章
- [互联网面试笔试汇总C/C++-7] 寻找两个链表的第一个交点-微策略
题目:有两个链表,找出他们的第一个交点,要求每个链表只能遍历一次,可以对链表进行任何操作,空间O(1). 思路: 这个题目刚开始看觉得要遍历一次有点困难,但是仔细一想,人家告诉说可以对链表进行任何操作 ...
- LeetCode题解汇总(包括剑指Offer和程序员面试金典,持续更新)
LeetCode题解汇总(持续更新,并将逐步迁移到本博客列表中) LeetCode题解分类汇总(包括剑指Offer和程序员面试金典) 剑指Offer 序号 题目 难度 03 数组中重复的数字 简单 0 ...
- LeetCode题解分类汇总(包括剑指Offer和程序员面试金典,持续更新)
LeetCode题解汇总(持续更新,并将逐步迁移到本博客列表中) 剑指Offer 数据结构 链表 序号 题目 难度 06 从尾到头打印链表 简单 18 删除链表的节点 简单 22 链表中倒数第k个节点 ...
- 剑指Offer——毕业生求职网站汇总(干货)
剑指Offer--毕业生求职网站汇总(干货) 致2017即将毕业的你~ 精品网站 牛客网:https://www.nowcoder.com 赛码网:http://www.acmcoder.com/ 招 ...
- 【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
各位程序猿: <剑指Offer>一书源自该书作者何海涛坚持更新与编写的博客(http://zhedahht.blog.163.com/),该博客收集整理了大量如微软.Goo ...
- 剑指Offer——中国银行面试知识储备
剑指Offer--中国银行面试知识储备+面试内容 事件介绍 时间:2016.11.23 08:30 地点:北京市海淀区永丰路299号南门(中国银行软件中心) 事件:中国银行面试(中英文面试) 注意事项 ...
- 剑指Offer(第二版)面试案例:树中两个节点的最低公共祖先节点
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/74612786冷血之心的博客) 剑指Offer(第二版)面试案例:树 ...
- 面试经典算法题集锦——《剑指 offer》小结
从今年 3 月份开始准备找实习,到现在校招结束,申请的工作均为机器学习/数据挖掘算法相关职位,也拿到了几个 sp offer.经历这半年的洗礼,自己的综合能力和素质都得到了一个质的提升. 实话说对于未 ...
- 剑指Offer——京东实习笔试题汇总
剑指Offer--京东实习笔试题汇总 编程题1 题目的详细信息已经记不住,只能大致描述一下,就是求最有价值的的委托信息. n.s.B.S其中n代表委托信息,s要求的最有价值的委托信息的个数,B代表买入 ...
随机推荐
- C#语言小结
数据类型--变量与常量--运算符与表达式--语句(if,for)--数组--函数--结构体 一.数据类型:(一)内建类型整型(int short long byte uint ushort ulong ...
- 基于jQuery实现的水平和垂直居中的div窗口
在建立网页布局的时候,我们经常会面临一个问题,就是让一个div实现水平和垂直居中,虽然好几种方式实现,但是今天介绍时我最喜欢的方法,通过css和jQuery实现. 1.通过css实现水平居中: 复 ...
- window.onload()与$(document).ready()区别
浏览器加载完DOM后,会通过javascript为DOM元素添加事件,在javascript中,通常使用window.onload()方法. 在jquery中,则使用$(document).ready ...
- viewport移动端的meta
随着高端手机(Andriod,Iphone,Ipod,WinPhone等)的盛行,移动互联应用开发也越来越受到人们的重视,用html5开发移动应用是最好的选择.然而,每一款手机有不同的分辨率,不同屏幕 ...
- 不可以为null值的自定义类型
1.今天早上编码发现,这很奇怪 再一看,原来是DateTime类型,DateTime进去一看发现时Struct类型,原来如此
- CSS超链接-光标-缩放
CSS超链接-光标-缩放 1.CSS 中链接的使用2.CSS 中光标的使用3.CSS 中缩放的使用 1.CSS 中链接的使用超链接伪类属性a:link 表示该超链接文字尚未被点选a:visite ...
- jquery结合Highcharts插件实现动态数据仪表盘图形化显示效果
仪表盘显示效果如图: 方法一效果图: 方法二效果图(插件版本4.0.1): js代码如下: $(function(){ //方法一: var chart = new Highcharts.Char ...
- Android 屏幕适配方式
适配:即当前应用在相同的手机上面显示相同的效果.适配前需要首先确定当前手机所属像素密度类型(如:xhdpi.hdpi.mdpi等) 像素密度:每英寸上分布的像素点个数,单位(dpi,ppi),利用勾股 ...
- MBG 相关资源链接
MyBatis Generator(MBG)相关资源链接 http://mbg.cndocs.tk/quickstart.html http://www.mybatis.tk/ http://git. ...
- POJ1961Period
POJ1961 #include<iostream> #include<cstdio> #include<cstring> using namespace std; ...