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;

}





你可能感兴趣的:(String类)