春招刷题笔记——剑指offer一

剑指offer——C++

赋值运算符函数

面试题1:赋值运算符函数
题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数。

#include<cstring>
#include<cstdio>
#include<string>
using namespace std;

class CMyString
{
public:
    CMyString(const char* pData = nullptr);
    CMyString(const CMyString& str);
    ~CMyString(void);

    CMyString& operator = (const CMyString& str);

    void Print();
      
private:
    char* m_pData;
};

本题的实现需要注意以下几个方面的问题:(1)返回的值的类型是该类型的一个引用,并且在函数结束之前返回这个类型的一个引用,只有这样才被允许使用连续赋值运算;(2)考虑到自己赋值给自己的情况;(3)在赋值之前释放自己本身已经占有的内存;(4)把传入参数的类型设置为常量引用。

CMyString& CMyString :: operator = (const CMyString& str) {
	if (this == &str) return *this;
	if (m_pdata != NULL) delete []m_pData;
	m_pData = new char[strlen(str) + 1];
	strcpy(m_pData, str);
	return *this;
	//  这种做法会在new失败的时候造成函数的错误,以下的程序可以避免new失败
}

CMyString& CMyString::operator = (const CMyString& str) {
	if (!this == &str) {
		CMyString isTemp(str);
		char* ptemp = isTemp.m_pData;
		isTemp.m_pData = m_pData;
		m_pData = ptemp;
	}
	return *this;
	//  先创建一个实例,再将实例的m_pData指针与自身的交换
	//  这样做可以避免new的时候出现的失败,并且实例isTemp
	//  在出if框之后,就出了这个变量的作用域。
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值