剣指offer:面接問題1賦値演算子関数


<pre name="code" class="cpp">//                (  offer:            )


#include <string>
class MyString
{
public:
	//            
	MyString(char* pData = NULL);
	//            
	MyString(const MyString& str);
	//          
	~MyString();

	//              
	MyString& operator = (const MyString &str);
	//          
	void print();
private:
	char* mData;

};

//           
MyString::MyString(char* pData)
{
	if (pData == NULL)
	{
		mData = new char[1];
		mData[0] = '\0';
	}
	else{
	
		int length = strlen(pData);
		mData = new char[length + 1];
		strcpy_s(mData, strlen(pData) + 1, pData);
	}
}

//           
MyString::MyString(const MyString& str)
{
	int length = strlen(str.mData);
	mData = new char[length + 1];
	strcpy_s(mData, strlen(str.mData) + 1, str.mData);
}
//         
MyString::~MyString(){
	delete mData;
}
/*
//         
MyString& MyString::operator = (const MyString& str)
{
	if (this == &str)
		return *this;
	delete mData;
	mData = NULL;
	int length = strlen(str.mData);
	mData = new char[length + 1];
	strcpy_s(mData, strlen(str.mData)+1,str.mData);
	return *this;
}*/
/*
	                  ,            :
	         ,             。
	      :
	*/
	MyString& MyString::operator =(const MyString &str){
		if(this != &str){
			MyString Tempstr(str);
			char* temp = Tempstr.mData;
			Tempstr.mData = mData;
			mData = temp;
		}
		return *this;
	}

//         
void MyString::print(){
	printf("%s 
",mData); } /********************** *****************/ void test1() { char* text = "hello world!"; MyString str1(text); MyString str2; // str2 = str1; str2.print(); } void test2() { char* text = "hello world!"; MyString str1(text); // MyString str2(str1); str2.print(); } void test3() { char* text = "hello world!"; MyString str1(text); MyString str2; MyString str3; // str3= str2 = str1; str2.print(); str3.print(); } void main() { //test1(); //test2(); test3(); }