为类添加赋值运算符函数:

类型定义

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++赋值运算符函数的更多相关文章

  1. 剑指offer:赋值运算符函数和复制构造函数

    赋值运算符函数 对于定义一个赋值运算符函数时,需要注意一下几点: (1)函数的返回类型必须是一个引用,因为只有返回引用,才可以连续赋值 (2)传入的参数声明为常量引用,可以提高代码效率,同时赋值运算函 ...

  2. P25、面试题1:赋值运算符函数

    题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString { public: CMyString(char* pData = NULL); CMyStr ...

  3. 剑指offer-面试题1:赋值运算符函数

    题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数 class CMyString { public: CMyString(char *pData=NULL); CMyString ...

  4. [互联网面试笔试汇总C/C++-9] 实现赋值运算符函数-剑指offer

    题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString { public: CMyString(char* pData = NULL); CMyStr ...

  5. 赋值运算符函数__from <剑指Offer>

    前段时间忙于项目,难得偷得几日闲,为即将到来的就业季做准备.在面试时,应聘者要注意多和考官交流,只有具备良好的沟通能力,才能充分了解面试官的需求,从而有针对性地选择算法解决问题. 题目来源于<剑 ...

  6. 请为CMyString类型编写构造函数、copy构造函数、析构函数和赋值运算符函数。

    如下为类型CMyString的声明,请为该类型编写构造函数.copy构造函数.析构函数和赋值运算符函数. class CMyString { public: CMyString(const char* ...

  7. 剑指offer-面试题1:赋值运算符函数

    如下为类型CMyString的声明,请为该类型添加赋值运算符函数. 解析:给一个类进行运算符重载. 关键部分代码: CMyString& CMyString::operator =(const ...

  8. (剑指Offer)面试题1:赋值运算符函数

    题目: 如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString{public:    CMyString(char* pData=NULL);    CMy ...

  9. 剑指 offer set 27 赋值运算符函数

    要求为类 CMyString 定义赋值运算符函数. 类的定义如下 class CMyString { public: CMyString(char* pData = NULL; ) CMyString ...

随机推荐

  1. HDU5739 Fantasia 树形dp + 点双缩点

    这个题当时打多校的时候有思路,但是代码能力差,没有写出来 事后看zimpha巨巨的题解,看了觉得基本差不多 核心思路:就是找出割点,然后变成森林,然后树形dp就可以搞了 关键就在重新构图上,缩完点以后 ...

  2. [原创]个人工具 - YE快速复制助手(YeFastcopyHelper)

    版本:v1.3.216 更新时间:2014/02/16 * 代码完善 + 右键关于显示当前版本号,点击并链接到软件帮助页 Technorati 标签: NET,.NET 3.5,asion C#,Ch ...

  3. Cloudera Impala Guide

    Impala Concepts and Architecture The following sections provide background information to help you b ...

  4. hadoop2.5发布:最新编译 32位、64位安装、源码包、API以及新特性

    hadoop2.5发布:最新编译 32位.64位安装.源码包.API以及新特性 http://www.aboutyun.com/thread-8751-1-1.html (出处: about云开发) ...

  5. 新版本ffmpeg解码非完整H264帧失败

    按照ffmpeg/doc/examples/decoding_encoding.c中video_decode_example解码H264,新版本ffmpeg解码非完整H264帧,定量读取数据直接给av ...

  6. java出现no XXX in java.library.path的解决办法及eclipse配置

    java一般使用两个path:classpath 和 java.library.path classpath是指向jar包的位置 java.library.path是非java类包的位置如(dll,s ...

  7. jxse2.6连接外网rdv一直连接不上,而相同的代码用jxse2.7却能连上

    一直以为2.6中的bug会少一些,所以用2.6做开发:之前测试一直是在同一台 机器上,所以没啥问题:最近在外网设置了一个rdv,却一直连不上,困扰了n久,尝试各种方式都不起作用.最后想起以前开发的代码 ...

  8. firefox 对相对定位的TD元素渲染错误

    <!DOCTYPE html> <html> <head> <title></title> <meta http-equiv=&quo ...

  9. hadoop streaming 编程

    概况 Hadoop Streaming 是一个工具, 代替编写Java的实现类,而利用可执行程序来完成map-reduce过程.一个最简单的程序 $HADOOP_HOME/bin/hadoop jar ...

  10. hadoop conf中xml文件修改

    core-site.xml <?xml version="1.0"?><?xml-stylesheet type="text/xsl" hre ...