#include<iostream>
#include<cstring>
using namespace std;
//C++实现string
class MyString
{
private:
char* m_pData;
public:
//构造函数
MyString()
{
m_pData = new char[1];
*m_pData = '\0';
}
//构造函数
MyString(const char* str)
{
m_pData = new char[strlen(str) + 1];
strcpy(m_pData, str);
}
//拷贝构造函数
MyString(const MyString& other)
{
m_pData = new char[strlen(other.m_pData) + 1];
strcpy(m_pData, other.m_pData);
}
//重载赋值运算符 =
MyString operator =(const MyString& other)
{
if (this != &other)
{
if (this->m_pData != NULL)
{
delete m_pData;
m_pData = NULL;
}
m_pData = new char[strlen(other.m_pData) + 1];
strcpy(m_pData, other.m_pData);
}
return*this;
}
//重载+运算符
MyString operator +(const MyString& other)const
{
MyString newstring;
if (this->m_pData == NULL)
{
newstring = other;
}
else if (other.m_pData == NULL)
{
newstring = *this;
}
else
{
newstring.m_pData = new char[strlen(this->m_pData) + strlen(other.m_pData) + 1];
strcpy(newstring.m_pData, this->m_pData);
strcat(newstring.m_pData, other.m_pData);
}
return newstring;
}
//重载下标运算符
char& operator [](unsigned int index)
{
//进行下标的判断,看它是否有效
if (index >= 0 && index < strlen(this->m_pData))
{
return this->m_pData[index];
}
}
friend ostream& operator << (ostream& os, MyString& str);
~MyString()
{
if (this->m_pData != NULL)
{
delete this->m_pData;
this->m_pData = NULL;
}
}
};
//重载输出运算符<<
ostream& operator << (ostream& os, MyString& str)
{
os << str.m_pData;
return os;
}
int main(void)
{
MyString str("Hello string");
MyString str1;
str1 = str;
cout << str1 << endl;
cout << str << endl;
cout << str[2] << endl;
return 0;
}