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 ...
随机推荐
- 《Python核心编程》 第八章 条件和循环
8–1.条件语句. 请看下边的代码 # statement A if x > 0: # statement B pass elif x < 0: # statement C pass el ...
- 《零成本实现Web自动化测试--基于Selenium》第二章 Selenium简介和基础
第一部分 Selenium简介 1.Selenium 组建 1.1 Selenium-IDE Selenium-IDC是开发Selenium测试案例的集成开发环境.它像FireFox插件一样的工作,支 ...
- User experience
User experience 以用户为中心, --通过简单的操作快速完成美好的任务 简单 聚焦,我在干什么?我接下来要干什么? 删除.隐藏,合并.分组 使用背景色,而非边框来划分区域 碎片化,电话不 ...
- 看仪表盘——validation
先试想一下,对于一个简单的二分类问题,我们如何选择合适的算法? 我们有许许多多的H,如何选择出最为合适的算法? 最合理的方法是:对于每一个H,我们选择出Eout最小的g,然后对于各个g,再选择Eout ...
- Maven解决Missing artifact com.sun:tools:jar:1.5.0错误
<dependency> <groupId>com.sun</groupId> <artifactId>tools</artifactId> ...
- pku3668 Game of Lines
http://poj.org/problem?id=3668 水题,STL #include <stdio.h> #include <set> using namespace ...
- 基于互联网的VOIP电话系统组建
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wangchunhai.blog.51cto.com/225186/42379 ...
- POJ 3673 Cow Multiplication (水题)
题意:给你两个数,求所有的数位的积的和. 析:太水了,没的说,可以先输入边算,也可以最后再算,一样.. 代码如下: #include <cstdio> #include <strin ...
- TypeScript学习笔记(七):模块
JavaScript中的模块 在学习TypeScript的模块之前我们先看看在JavaScript中的模块是如何实现的. 模块的好处 首先我们要了解使用模块的好处都有什么? 模块化.可重用: 封装变量 ...
- iOS-default.png启动图片
我在xcode5下写的代码,我下载了iOS6的模拟器,我用iOS6和iOS7的模拟器切换运行,有的时候可以运行有的时候不可以运行,报错: 2013-11-17 16:49:04.049 sim[474 ...