1. 程式人生 > >String建構函式 拷貝建構函式 解構函式 賦值建構函式的實現

String建構函式 拷貝建構函式 解構函式 賦值建構函式的實現

標題:String函式的實現-->主要實現建構函式,拷貝建構函式,解構函式,賦值建構函式。這幾個函式是字串函式最基本的函式,今天也總結一下

#include<iostream>
using namespace std;
#include<string.h>

class MyString
{
private:
	char *str;
public:
	MyString(const char *pStr)//建構函式
	{
		if(pStr==NULL)
		{
			str=new char[1];
			*str='\0';
		}
		else
		{
			str=new char[strlen(pStr)+1];
			strcpy(str,pStr);
		}
	}
	MyString(const MyString &other)//拷貝建構函式,必須用引用傳遞,
								//如果不用引用傳遞將會出現無限遞迴迴圈
	{
		if(this==&other)
			return;
		str=new char[strlen(other.str)+1];
		strcpy(str,other.str);
	}
	~MyString()//解構函式
	{
		delete []str;
		str=NULL;//防止野指標
	}
	//最簡單直接的寫法(賦值函式)用引用返回為了連續賦值
	/*MyString& operator=(const MyString &other)
	{
		if(this != &other)
		{
			delete []str;
			str=new char[strlen(other.str)+1];
			strcpy(str,other.str);
		}
		return *this;
	}*/
	//高階程式設計師的寫法(賦值函式)
	MyString& operator=(const MyString &other)
	{
		if(this != &other)
		{
			MyString Tmp(other);//交換指向的地址,然後退出if語句後自動呼叫解構函式釋放之前的記憶體
			char *ret=Tmp.str;
			Tmp.str=str;
			str=ret;
		}
		return *this;//返回*this
	}
	void show()const
	{
		cout<<"str="<<str<<endl;
	}
};