http://blog.csdn.net/wangshihui512/article/details/9792309
已知String類聲明如下:
- class?String???
- {???
- ????public:???
- ????String(const?char?*str?=?NULL);???
- ????String(const?String?&another);???
- ????~?String();???
- ????String?&?operater?=(const?String?&rhs);???
- ????private:???
- ????char?*m_data;???
- };???
寫出類的成員函數實現:
- String::String(const?char?*str)???
- {???
- ????if?(?str?==?NULL?)???
- ????{???
- ????????m_data?=?new?char[1]?;???
- ????????m_data[0]?=?'\0'?;???
- ????}???
- ????else???
- ????{???
- ????????m_data?=?new?char[strlen(str)?+?1];???
- ????????strcpy(m_data,str);???
- ????}???
- }???
- String::String(const?String?&another)???
- {???
- ????m_data?=?new?char[strlen(another.m_data)?+?1];???
- ????strcpy(m_data,other.m_data);???
- }???
- String&?String::operator?=(const?String?&rhs)???
- {???
- ????if?(?this?==?&rhs)???
- ????????return?*this?;???
- ????delete?[]m_data;???
- ????m_data?=?new?char[strlen(rhs.m_data)?+?1];???
- ????strcpy(m_data,rhs.m_data);???
- ????return?*this?;???
- }???
- String::~String()???
- {???
- ????delete?[]m_data?;???
- }???
String::String(const char *str)?
{?
??? if ( str == NULL ) //strlen在參數為NULL時會拋異常才會有這步判斷?
??? {?
??????? m_data = new char[1] ;?
??????? m_data[0] = '\0' ;?
??? }?
??? else?
??? {?
??????? m_data = new char[strlen(str) + 1];?
??????? strcpy(m_data,str);?
??? }?
}?
String::String(const String &another)?
{?
??? m_data = new char[strlen(another.m_data) + 1];?
??? strcpy(m_data,other.m_data);?
}?
String& String::operator =(const String &rhs)?
{?
??? if ( this == &rhs)?
??????? return *this ;?
??? delete []m_data; //刪除原來的數據,新開一塊內存?
??? m_data = new char[strlen(rhs.m_data) + 1];?
??? strcpy(m_data,rhs.m_data);?
??? return *this ;?
}?
String::~String()?
{?
??? delete []m_data ;?
}?