#include <iostream>
#include <cstring>
using namespace std;
class myString
{
public:
//myString();
myString(const char *str = NULL);
myString(const myString &other);
myString& operator=(const myString &other);
~myString();
void print() const
{
cout << data << endl;
}
private:
char *data;
};
myString::myString(const char *str)
{
if(str == NULL)
{
data = new char[1];
data[0] = '\0';
}
else
{
int len = strlen(str); //strlen("") == 0 & strlen(NULL) illegal
data = new char[len+1];
strcpy(data, str);
}
}
myString::myString(const myString &other)
{
int len = strlen(other.data); //sizeof()
data = new char[len+1];
strcpy(data, other.data);
}
myString& myString::operator=(const myString &other)
{
if(this == &other)
return *this;
delete []data;
int len = strlen(other.data);
data = new char[len+1];
strcpy(data, other.data);
return *this;
}
myString::~myString()
{
delete []data;
}
int main()
{
char *s = "123";
myString str(s);
cout << "str :";
str.print();
myString str1(str);
cout << "str1 :";
str1.print();
//define str2 like this cannot complete assignment operation
myString str2; //strlen(NULL)
//myString str2(""); //strlen("")
str2 = str;
cout << "str2 :";
str2.print();
return 0;
}