#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class String
{
public:
String()
:_pstr(new char[1])
{
_pstr[0] = '\0';
}
String(char *pstr)
:_pstr(new char[strlen(pstr) + 1])
{
strcpy(_pstr, pstr);
}
~String()
{
if (_pstr)
{
delete[] _pstr;
}
}
String(const String &S)
:_pstr (new char[strlen(S._pstr) + 1])
{
strcpy(_pstr, S._pstr);
}
String&operator=(const String &S)
{
if (this != &S)
{
delete []_pstr;
_pstr = new char[strlen(S._pstr) + 1];
strcpy(_pstr, S._pstr);
}
return *this;
}
//优化写法
/*void Swap(String &s)
{
char *tmp = _pstr;
_pstr = s._pstr;
s._pstr = tmp;
}
String(const String &s) :_pstr(NULL)
{
String tmp(s._pstr);
Swap(tmp);
}*/
/*String&operator=(const String &s)
{
if (this != &s)
{
String tmp(s._pstr);
Swap(tmp);
}
return *this;
}*/
//优化赋值运算符重载
/*void Swap(String s)
{
char *tmp = _pstr;
_pstr = s._pstr;
s._pstr = tmp;
}
String &operator=(const String &s)
{
Swap(s);
return *this;
}*/
void GetStr()
{
cout << _pstr << endl;
}
private:
char *_pstr;
};
int main()
{
String op1("abcdef");
op1.GetStr();
String op2 = op1;
op2.GetStr();
String op3;
op3 = op1;
op3.GetStr();
system("pause");
return 0;
}