#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
class CMyString
{
friend ostream&
operator<<(ostream &out,
const CMyString &str);
friend istream&
operator>>(istream &in, CMyString &str);
public:
CMyString(
char* pData =
nullptr);
CMyString(
const CMyString& str);
~CMyString(
void);
CMyString&
operator = (
const CMyString &str);
CMyString&
operator += (
const CMyString &str);
CMyString&
operator + (
const CMyString &str);
void show();
private:
char* m_pData;
};
ostream &
operator<<(ostream &out,
const CMyString &str)
{
out << str.m_pData << endl;
return out;
}
istream &
operator>>(istream &in, CMyString &str)
{
in >> str.m_pData;
return in;
}
CMyString::CMyString(
char *pData)
{
if (pData ==
nullptr)
{
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];
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)
{
char *str1;
if (str.m_pData ==
nullptr)
return *
this;
else
{
str1 =
new char[
strlen(m_pData) +
strlen(str.m_pData) +
1];
strcpy(str1, m_pData);
strcat(str1, str.m_pData);
}
delete[]m_pData;
m_pData = str1;
return *
this;
}
CMyString& CMyString::
operator + (
const CMyString &str)
{
char *temp;
if (str.m_pData ==
nullptr)
return *
this;
else
{
temp =
new char[
strlen(m_pData) +
strlen(str.m_pData) +
1];
strcpy(temp, m_pData);
strcat(temp, str.m_pData);
}
delete[]m_pData;
m_pData = temp;
return *
this;
}
void CMyString::show()
{
cout << m_pData << endl;
}
void Test1()
{
cout <<
"******************Test1(赋值)*****************" << endl;
char *text =
"Hello world";
CMyString str1(text);
CMyString str2;
str2 = str1;
cout <<
"The expected result is:" << text << endl;
cout <<
"The actual result is:";
str2.show();
cout << endl;
}
void Test2()
{
cout <<
"*********************Test2(加法)******************" << endl;
char *text1 =
"shuang";
char *text2 =
"is a beautiful girl!";
CMyString str1(text1);
CMyString str2(text2);
CMyString str;
cout <<
"The expected result is:" << text1 <<
" " << text2 << endl;
str1 += str2;
cout <<
"str1 += str2:";
str1.show();
CMyString str3 =
"hai";
CMyString str4 =
"Merry";
str = str3 + str4;
cout <<
"str3 + str4:" << str << endl;
}
void Test3()
{
CMyString str1;
CMyString str2;
cin >> str1 >> str2;
cout <<
"str1:" << str1 << endl;
cout <<
"str2:" << str2 << endl;
}
int main(
int argc,
char *argv[])
{
Test1();
Test2();
Test3();
return 0;
}