string类实现

#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;
}


原文地址:https://www.cnblogs.com/helloweworld/p/3045110.html