//============定义赋值运算符函数================
//#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();
}