本题来源于《剑指oOfer》24页面试题1:赋值运算符函数,主要实现一个简单的string类赋值运算符、复制构造函数等。代码如下:
#include <iostream>
#include <string>
using namespace std;
//类的定义及成员函数实现
class CMyString
{
public:
CMyString(char *pData=NULL);
CMyString(const CMyString& str);
~CMyString(void);
CMyString& operator=(const CMyString &str);
void output();
private:
char * m_pData;
};
CMyString::CMyString(char *pData)
{
if(pData==NULL)
{
m_pData=new char[1];
m_pData[0]='\0';
}
else {
m_pData=new char[strlen(pData)+1];
strcpy(m_pData,pData);
}
}
CMyString::CMyString(const CMyString& str)
{
m_pData=new char[strlen(str.m_pData)+1];
strcpy(m_pData,str.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(void)
{
delete []m_pData;
}
void CMyString::output()
{
cout<<m_pData<<endl;
}
//下面是三个测试用例
void Test1()//测试将CMyString实例赋值给另一个实例
{
char *text="hello zhangchao";
CMyString s1(text);
CMyString s2;
s2=s1;
cout<<"第一个string:\n";
s1.output();
cout<<"赋值后得到的第二个string:\n";
s2.output();
}
void Test2()//测试将CMyString实例赋值给自己
{
char *text="hello zhangchao";
CMyString s1(text);
cout<<"赋值前\n";
s1.output();
s1=s1;
cout<<"赋值给自己后\n";
s1.output();
}
void Test3()//测试将CMyString实例连续赋值
{
char *text="hello zhangchao";
CMyString s1(text);
cout<<"第一个string:\n";
s1.output();
CMyString s2,s3,s4;
s4=s3=s2=s1;
cout<<"连续赋值后,得到第二三四个string:\n";
s2.output();
s3.output();
s4.output();
}
void main()
{
Test1();
Test2();
Test3();
}
运行结果如下: