55. 题目:类 CMyString 的声明如下:
class CMyString
{
public:
CMyString(char* pData = NULL);
CMyString(const CMyString& str);
~CMyString(void);
CMyString& operator = (const CMyString& str);
private:
char* m_pData;
};
请实现其赋值运算符的重载函数,要求异常安全,即当对一个对象进行赋值时发生异常,对
象的状态不能改变。
/*
55. 题目:类 CMyString 的声明如下:
class CMyString
{
public:
CMyString(char* pData = NULL);
CMyString(const CMyString& str);
~CMyString(void);
CMyString& operator = (const CMyString& str);
private:
char* m_pData;
};
请实现其赋值运算符的重载函数,要求异常安全,
即当对一个对象进行赋值时发生异常,对象的状态不能改变。
*/
#include<iostream>
#include<string>
using namespace std;
class CMyString
{
public:
CMyString(char* pData=NULL);//1,2
~CMyString();
CMyString(const CMyString &str);//3
CMyString& operator=(const CMyString &str);//4
void print();
private:
char* m_pData;
};
CMyString::CMyString(char* pData)
{
if(pData==NULL)
{
m_pData=new char[1];
*m_pData=NULL;
}
else
{
int len=strlen(pData);
m_pData=new char[len+1];
strcpy(m_pData,pData);
}
}
CMyString::~CMyString(){
}
CMyString::CMyString(const CMyString &str)
{
int len=strlen(str.m_pData);
m_pData=new char[len+1];
strcpy(m_pData,str.m_pData);
}
CMyString & CMyString::operator=(const CMyString &str)
{
if(this==&str)
{
return *this;
}
delete[]m_pData;
m_pData=NULL;
int len=strlen(str.m_pData);
m_pData= new char[len+1];
strcpy(m_pData,str.m_pData);
return *this;
}
void CMyString::print()
{
if(*m_pData!=NULL)
cout<<m_pData<<endl;
else
cout<<"NULL"<<endl;
}
int main()
{
CMyString str1("hello"); //1
CMyString str2; //2
str1.print();
str2.print();
CMyString str3(str1);//3
str3.print();
CMyString str4;
str4=str1; //4
str4.print();
}