class MyString
{
public:
MyString();
explicit MyString(const char* pData);
MyString(const MyString& cpyDest);
~MyString();
MyString& operator=(const MyString& rString );
friend ostream& operator<<(ostream& output,const MyString& outMyStr );
const char* c_str();
private:
char* m_pData;
};
MyString::MyString()
{
m_pData=new char[1];
if(m_pData !=NULL) //判断内存是否分配成功
*m_pData='\0';
}
MyString::MyString(const char *pData)
{
if(pData ==NULL)
{
m_pData=new char[1];
if(m_pData !=NULL)
*m_pData='\0';
}
else
{
int size=strlen(pData)+1;
m_pData=new char[size];
if(m_pData !=NULL) //判断内存是否分配成功
strcpy(m_pData,pData);
}
}
MyString::MyString(const MyString& rString)
{
int size=strlen(rString.m_pData)+1;
m_pData=new char[size];
if(m_pData !=NULL) //判断内存是否分配成功
strcpy(m_pData,rString.m_pData);
}
MyString::~MyString()
{
if(m_pData !=NULL)
{
delete []m_pData;
m_pData=NULL;
}
}
MyString& MyString::operator=(const MyString& rString)
{
//检查自赋值
if(this == &rString)
return *this;
//释放原有的内存资源
delete []m_pData;
//分配新的内存资源,并拷贝内容
int size=strlen(rString.m_pData)+1;
m_pData=new char[size];
if(m_pData !=NULL) //判断内存是否分配成功
strcpy(m_pData,rString.m_pData);
//返回对象本身
return *this;
}
ostream& operator<<(ostream& output,const MyString& outMyStr)
{
if(outMyStr.m_pData !=NULL)
output<<outMyStr.m_pData;
return output;
}
const char* MyString::c_str()
{
return m_pData;
}
写一个仿string的类
最新推荐文章于 2024-10-24 21:03:37 发布