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

类型定义

  1. class CMyString
  2. {
  3. public:
  4. CMyString(char *pData = NULL);
  5. CMyString(const CMyString &str);
  6. ~CMyString(void);
  7.  
  8. CMyString &operator=(const CMyString &);
  9.  
  10. private:
  11. char *m_pData;
  12. };

要点:

1、返回值类型为该类型的引用,并在函数结束前返回实例自身的引用(即 *this);

2、是否把传入的参数声明为常量引用【const CmyString &str】;

3、是否释放自身已有内存,否则会造成“内存泄漏”;

4、是否判断参数与当前示例是指向的同一个对象;

解法:

  1. /*
  2. 适用于初级C++程序员的解法
  3. */
  4. CMyString &CMyString::operator=(const CMyString &str)
  5. {
  6. //首先检测两个指针是否指向同一个对象
  7. if (this == &str)
  8. return *this;
  9.  
  10. //释放原内存
  11. delete []m_pData;
  12. m_pData = NULL;
  13.  
  14. //重新申请内存
  15. m_pData = new char[strlen(str.m_pData) + ];
  16. strcpy(m_pData,str.m_pData);
  17.  
  18. //谨记:返回*this
  19. return *this;
  20. }
  21.  
  22. /*
  23. 适用于高级C++程序员的解法
  24. */
  25. CMyString &CMyString::operator=(const CMyString &str)
  26. {
  27. if (this != &str) //确保不指向同一个实例
  28. {
  29. CMyString strTemp(str);
  30.  
  31. char *pTemp = strTemp.m_pData; //指针指向需要更换的对象
  32. //strTemp.m_pData指向原来的对象,确保内存不足时可以找到原来对象的值
  33. strTemp.m_pData = m_pData;
  34. m_pData = pTemp; //更换原对象的值
  35. } //自动调用strTemp的析构函数,销毁strTemp对象并回收pTemp的内存
  36.  
  37. return *this;
  38. }

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. The Bookcase

    题意: 有n本宽w高h的书,向三层书架上放,每层不能为空,求占用的整体的最小面积(总高度*三层中最宽的) 分析: 不太好想,dp[i][j]表示第一层宽度为i第二层为j放的最小高度 dp[i][j]= ...

  2. javascript 面向对象整理

    整理一下js面向对象中的封装和继承. 1.封装 js中封装有很多种实现方式,这里列出常用的几种. 1.1 原始模式生成对象 直接将我们的成员写入对象中,用函数返回. 缺点:很难看出是一个模式出来的实例 ...

  3. Jemeter对Oracle数据库性能测试方法

    下载Oracle的jdbc数据库驱动包,注意Oracle数据库的版本,这里使用的是:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 ...

  4. flashback table恢复数据

    flashback table恢复数据 flashback table主要是是用undo 表空间的内容,进行对数据修改的回退操作 语法如下: 根据scn号来进行回退 SQL> flashback ...

  5. Apache:如何利用.htaccess文件对PHP网站或文件进行伪静态处理

    来源:http://www.ido321.com/1123.html 今天get了一招:利用.htaccess文件对PHP网站或文件进行伪静态处理. 一.检查服务器是否支持伪静态处理: 必 须要空间支 ...

  6. iOS开发相关图书推荐

    Objective-C编程之道:iOS设计模式解析 作      者 [美] Carlo Chung 著:刘威 译 出 版 社 人民邮电出版社 出版时间 2011-11-01 版      次 1 页 ...

  7. gdb 技巧

    现实数组: 比如说要显示a[10]中全部的内容用 p a显示的是地址,用p *a显示的是第一个元素显示全部或某一个:p (int [10])*a或者p *a@10 如果你使用 p *a@3 或 p * ...

  8. 10个专属于移动app开发者的最佳移动JavaScript框架

    1.Titanium Mobile JavaScript Frameworks Titanium Mobile JavaScript框架是移动应用开发者(Android & iOS)首选的最优 ...

  9. POJ 2387 Til the Cows Come Home (最短路 dijkstra)

    Til the Cows Come Home 题目链接: http://acm.hust.edu.cn/vjudge/contest/66569#problem/A Description Bessi ...

  10. codeforces 651B Beautiful Paintings

    B. Beautiful Paintings time limit per test 1 second memory limit per test 256 megabytes input standa ...