#include <iostream>
#include <string>
using namespace std;
class MyString
{
public:
MyString(const char* str=NULL);
MyString(const MyString& string);
MyString& operator=(const MyString& string );
~MyString();
public:
char* m_data;
};
MyString::MyString(const char* str)
{
if(str == NULL)//普通构造函数
{
m_data = new char[1];
if(m_data == nullptr)
throw "Memory over";
m_data[0]='\0';
}
else//字符串赋值 有参 构造函数
{
int len =strlen(str)+1;
m_data = new char[len];
if(m_data == nullptr)
throw "Memory over";
strncpy(m_data,str,len);
}
}
MyString::MyString(const MyString& string)
{
int len =strlen(string.m_data)+1;
m_data = new char[len];
if(m_data == nullptr)
throw "Memory over";
strncpy(m_data,string.m_data,len);
}
MyString& MyString::operator=(const MyString& string )
{
if(this == &string)//自检测
return *this;
else
{
delete[] m_data;
int len =strlen(string.m_data)+1;
this->m_data = new char[len];
if(m_data == nullptr)
throw "Memory over";
strncpy(m_data,string.m_data,len);
return *this;
}
}
MyString::~MyString()
{
if(m_data)
{
delete[] m_data;
m_data = nullptr;
}
}
int main()
{
MyString str0 ;
MyString str = "123";
MyString str1 = "465";
MyString str2 = str1;
/*strncpy(char* Dest,char* source,int len);//len我开始只是用的strlen(str)就不行,
得+1 '\0'得算上
*/
return 0 ;
}