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 ...
随机推荐
- The Bookcase
题意: 有n本宽w高h的书,向三层书架上放,每层不能为空,求占用的整体的最小面积(总高度*三层中最宽的) 分析: 不太好想,dp[i][j]表示第一层宽度为i第二层为j放的最小高度 dp[i][j]= ...
- javascript 面向对象整理
整理一下js面向对象中的封装和继承. 1.封装 js中封装有很多种实现方式,这里列出常用的几种. 1.1 原始模式生成对象 直接将我们的成员写入对象中,用函数返回. 缺点:很难看出是一个模式出来的实例 ...
- Jemeter对Oracle数据库性能测试方法
下载Oracle的jdbc数据库驱动包,注意Oracle数据库的版本,这里使用的是:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 ...
- flashback table恢复数据
flashback table恢复数据 flashback table主要是是用undo 表空间的内容,进行对数据修改的回退操作 语法如下: 根据scn号来进行回退 SQL> flashback ...
- Apache:如何利用.htaccess文件对PHP网站或文件进行伪静态处理
来源:http://www.ido321.com/1123.html 今天get了一招:利用.htaccess文件对PHP网站或文件进行伪静态处理. 一.检查服务器是否支持伪静态处理: 必 须要空间支 ...
- iOS开发相关图书推荐
Objective-C编程之道:iOS设计模式解析 作 者 [美] Carlo Chung 著:刘威 译 出 版 社 人民邮电出版社 出版时间 2011-11-01 版 次 1 页 ...
- gdb 技巧
现实数组: 比如说要显示a[10]中全部的内容用 p a显示的是地址,用p *a显示的是第一个元素显示全部或某一个:p (int [10])*a或者p *a@10 如果你使用 p *a@3 或 p * ...
- 10个专属于移动app开发者的最佳移动JavaScript框架
1.Titanium Mobile JavaScript Frameworks Titanium Mobile JavaScript框架是移动应用开发者(Android & iOS)首选的最优 ...
- 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 ...
- codeforces 651B Beautiful Paintings
B. Beautiful Paintings time limit per test 1 second memory limit per test 256 megabytes input standa ...