【剑指offer】赋值运算符函数_01

//============定义赋值运算符函数================

//#1.注意函数返回值,可允许连续赋值
//#2.注意参数为const 引用类型
//#3.注意内存泄露
//#4.判断传入参与与当前值是否为一个实例
//#5.注意异常安全性
#include <iostream.h>
#include <string>
class cMyString
{
public:
	cMyString(char * pData=NULL);
	cMyString(const cMyString& str);
	~cMyString(void);
	cMyString& operator =(const cMyString &str);
	void Print();
private:
	char * m_pData;
};
cMyString::cMyString(char *pData)
{
	if(pData==NULL)
	{
		m_pData=new char[1];
		m_pData[0]='\0';
	}
	else
	{
        int length = strlen(pData);
        m_pData = new char[length + 1];
        strcpy(m_pData, pData);
	}
}
cMyString::cMyString(const cMyString &str)
{
    int length = strlen(str.m_pData);
    m_pData = new char[length + 1];
    strcpy(m_pData, str.m_pData);
}
cMyString::~cMyString()
{
	delete [] m_pData;
}
/*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)+1];
	strcpy(m_pData,str.m_pData);
	return *this;
}*/
cMyString& cMyString::operator =(const cMyString &str)
{
	if(this !=&str)
	{
		cMyString strTemp(str);
		char * pTemp=strTemp.m_pData;
		strTemp.m_pData=m_pData;
		m_pData=pTemp;
	}
	return *this;
}
void cMyString::Print()
{
	printf("%s",m_pData);
}
//====================测试代码==========================
void Test1()
{
	printf("Test1 begin:\n");

	char * text="hello world";
    cMyString str1(text);
	cMyString str2;
	str2=str1;

	printf("The expected result is %s.\n",text);
	printf("The actual result is:");
	str2.Print();
	printf(".\n");
}
void Test2()
{
	printf("Test1 begin:\n");

	char * text="hello world";
    cMyString str1(text);
	cMyString str2;
    cMyString str3;
 	str3=str2=str1;

	printf("The expected result is %s.\n",text);
	printf("The actual result is:");
	str3.Print();
	printf(".\n");
}
void Test3()
{
	printf("Test1 begin:\n");

	char * text="hello world";
    cMyString str1(text);
 	str1=str1;

	printf("The expected result is %s.\n",text);
	printf("The actual result is:");
	str1.Print();
	printf(".\n");
}
void main()
{
	Test1();
	Test2();
	Test3();
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值