为如下CMyString类型添加赋值运算符函数
#include
#include
//为下列函数添加赋值运算符函数
class CMyString {
public:
CMyString(char *pData = nullptr);
CMyString(const CMyString &str);
CMyString operator=(const CMyString &str);
void Print();
~CMyString(void);
private:
char *m_pData;
};
CMyString::CMyString(char *pData) {
if (pData == nullptr) {
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 = nullptr;
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)
// {
// //先创建一个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 Test16_1()
{
printf("Test1 begin:\n");
char *text="Hello world";
CMyString str1(text);
CMyString str2;
str2=str1;
printf("The expected resultis: %s.\n",text);
printf("The actual resultis: ");
str2.Print();
printf(".\n");
}
void Test16_2()
{
printf("Test2 begin:\n");
char *text="Hello world";
CMyString str1(text);
// CMyString str2;
str1=str1;
printf("The expected resultis: %s.\n",text);
printf("The actual resultis: ");
str1.Print();
printf(".\n");
}
// 连续赋值
void Test16_3()
{
printf("Test3 begins:\n");
char* text = "Hello world";
CMyString str1(text);
CMyString str2, str3;
str3 = str2 = str1;
printf("The expected result is: %s.\n", text);
printf("The actual result is: ");
str2.Print();
printf(".\n");
printf("The expected result is: %s.\n", text);
printf("The actual result is: ");
str3.Print();
printf(".\n");
}
int main(int argc, char* argv[])
{
Test16_1();
Test16_2();
Test16_3();
return 0;
}