#include <iostream>
#include <cstring>
using namespace std;
class MyString {
public:
MyString();
MyString(const char* cstr);
MyString(const MyString &other);
MyString& operator=(const MyString &other);
size_t length() {
return size;
}
friend istream& operator>>(istream &in, const MyString &str);
friend ostream& operator<<(ostream &out, const MyString &str);
~MyString();
protected:
char *data;
size_t size;
};
MyString::MyString() {
size = 0;
data = new char[1];
*data = '\0';
}
MyString::MyString(const char *cstr) {
if (cstr != NULL) {
size = strlen(cstr);
data = new char[size + 1];
strcpy(data, cstr);
} else {
size = 0;
data = new char[size + 1];
*data = '\0';
}
}
MyString::MyString(const MyString &other) {
if (!other.data) {
data = new char[other.size + 1];
*data = '\0';
size = 0;
} else {
size = other.size;
data = new char[1];
strcpy(data, other.data);
}
}
MyString& MyString::operator =(const MyString &other) {
/*if (this != &other) {
size = strlen(other.data);
char *temp = new char[size + 1];
strcpy(temp, other.data);
delete []data;
data = temp;
}
return *this;*/
if (this != &other) {
MyString strTmp(other);
char *pTmp = strTmp.data;
strTmp.data = data;
data = pTmp;
}
return *this;
}
MyString::~MyString() {
delete []data;
}
int main()
{
char *s = NULL;
MyString str(s);
return 0;
}