class String
{
public:
String( const char *str);
String( const String &other);
~String();
String &operator=(const String &other);
private:
char *data;
};
//構造函數
String::String(const char *str)
{
if (str == NULL) //指針可能爲空,要判斷
{
data = new char [1];
*data = '\0';
}
else
{
int length = strlen(str );
data = new char [length + 1];
strcpy(data, str);
}
}
//析構函數
String::~String()
{
delete data;
}
//拷貝構造函數
String::String(const String & other)
{
int length = strlen(other .data);
data = new char [length + 1];
strcpy(data, other.data);
}
//賦值函數
String &String ::operator=(const String & other)
{
if (this == &other) //引用不可能爲空,所以不用判斷,注意不要錯寫爲:if(*this==other)
{
return *this ;
}
delete data; //釋放原有的內存資源,以後沒機會釋放
int length = strlen(other .data); //strlen不包含‘0’,strcpy包含‘0’一起復制
data = new char [length + 1];
strcpy(data, other.data);
return *this ; //返回本對象的引用,爲了實現像a=b=c這樣的鏈式表達
}
時間問題,後期有需要補充的會陸續補充