C++赋值运算符函数
为类添加赋值运算符函数:
类型定义
class CMyString
{
public:
CMyString(char *pData = NULL);
CMyString(const CMyString &str);
~CMyString(void); CMyString &operator=(const CMyString &); private:
char *m_pData;
};
要点:
1、返回值类型为该类型的引用,并在函数结束前返回实例自身的引用(即 *this);
2、是否把传入的参数声明为常量引用【const CmyString &str】;
3、是否释放自身已有内存,否则会造成“内存泄漏”;
4、是否判断参数与当前示例是指向的同一个对象;
解法:
/*
适用于初级C++程序员的解法
*/
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) + ];
strcpy(m_pData,str.m_pData); //谨记:返回*this
return *this;
} /*
适用于高级C++程序员的解法
*/
CMyString &CMyString::operator=(const CMyString &str)
{
if (this != &str) //确保不指向同一个实例
{
CMyString strTemp(str); char *pTemp = strTemp.m_pData; //指针指向需要更换的对象
//strTemp.m_pData指向原来的对象,确保内存不足时可以找到原来对象的值
strTemp.m_pData = m_pData;
m_pData = pTemp; //更换原对象的值
} //自动调用strTemp的析构函数,销毁strTemp对象并回收pTemp的内存 return *this;
}
C++赋值运算符函数的更多相关文章
- 剑指offer:赋值运算符函数和复制构造函数
		
赋值运算符函数 对于定义一个赋值运算符函数时,需要注意一下几点: (1)函数的返回类型必须是一个引用,因为只有返回引用,才可以连续赋值 (2)传入的参数声明为常量引用,可以提高代码效率,同时赋值运算函 ...
 - P25、面试题1:赋值运算符函数
		
题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString { public: CMyString(char* pData = NULL); CMyStr ...
 - 剑指offer-面试题1:赋值运算符函数
		
题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数 class CMyString { public: CMyString(char *pData=NULL); CMyString ...
 - [互联网面试笔试汇总C/C++-9] 实现赋值运算符函数-剑指offer
		
题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString { public: CMyString(char* pData = NULL); CMyStr ...
 - 赋值运算符函数__from <剑指Offer>
		
前段时间忙于项目,难得偷得几日闲,为即将到来的就业季做准备.在面试时,应聘者要注意多和考官交流,只有具备良好的沟通能力,才能充分了解面试官的需求,从而有针对性地选择算法解决问题. 题目来源于<剑 ...
 - 请为CMyString类型编写构造函数、copy构造函数、析构函数和赋值运算符函数。
		
如下为类型CMyString的声明,请为该类型编写构造函数.copy构造函数.析构函数和赋值运算符函数. class CMyString { public: CMyString(const char* ...
 - 剑指offer-面试题1:赋值运算符函数
		
如下为类型CMyString的声明,请为该类型添加赋值运算符函数. 解析:给一个类进行运算符重载. 关键部分代码: CMyString& CMyString::operator =(const ...
 - (剑指Offer)面试题1:赋值运算符函数
		
题目: 如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString{public: CMyString(char* pData=NULL); CMy ...
 - 剑指 offer set 27 赋值运算符函数
		
要求为类 CMyString 定义赋值运算符函数. 类的定义如下 class CMyString { public: CMyString(char* pData = NULL; ) CMyString ...
 
随机推荐
- 翻译【ElasticSearch Server】第一章:开始使用ElasticSearch集群(4)
			
停止ElasticSearch(Shutting down ElasticSearch) 尽管我们期望集群(或节点)终生完美运行,我们最终可能需要重启或者正确的停止它(例如,维护).有三种方式来停止E ...
 - Ubuntu下命令行cd进不了/home/用户目录
			
输入命令:cd /home/usr后和刚刚进入终端一样,其实已经进入了usr中,终端默认用usr用户登录,输入ls就可以查看usr目录下的文件
 - 为移动Web应用创建快速响应按钮
			
英文原文出自 Google Deveploers<Creating Fast Buttons for Mobile Web Applications>,由XiaoYi_HD翻译,并首发于 ...
 - Seam carving 学习笔记
			
今天首次接触了图像编辑中的seam carving知识,感觉挺神奇的.虽然我自己可能理解的不是很深刻,但是记录下来,总是好的. seam carving直接翻译过来是“线裁剪”的意思.它的主要用途是对 ...
 - 【开发流程】土耳其CDD工具
			
土耳其的CDD工具开发到现在已经三个星期了,进展非常不顺利,从最开始的遇到很多难题没法解决到现在工具可以运行但是有一个bug. 起初遇到的ExternalUtranCell这一页的信息很难填,没有解决 ...
 - LeetCode题解——3Sum
			
题目: 给定一个数组,找出其中和为0的所有3个数的组合.每个组合的3个数都是非递降的. 解法: 先排序再遍历,设置3个指针,第一个依次遍历,第二三个在第一个指针后面的部分里,左右夹逼查找和为第一个数的 ...
 - 《Genesis-3D开源游戏引擎-官方录制系列视频教程:进阶实例篇》
			
注:本系列教程仅针对引擎编辑器:v1.2.2及以下版本 G3D进阶实例 第四课<2D编辑与脚本的统一入口> 使用G3D完成一个简单的类飞机大战游戏,介绍了G3D2d游戏制作的流程包括: ...
 - EasyMock
			
使用 EasyMock 更轻松地进行测试 窥探EasyMock(1)基础使用篇 窥探EasyMock(2)进阶使用篇
 - SDK "iphoneos" cannot be located
			
在MAC下,交叉编译libvlc出现的一些问题和解决方法.项目中使用了libvlc开源库.在执行编译脚本中,遇到一句xcrun --sdk iphoneos --show-sdk-path报错 mac ...
 - 探索ORACLE之ASM概念
			
一. ASM(自动存储管理)的来由: ASM是Oracle 10g R2中为了简化Oracle数据库的管理而推出来的一项新功能,这是Oracle自己提供的卷管理器,主要用于替代操作系统所提供的 ...