String類

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這樣的鏈式表達

}



時間問題,後期有需要補充的會陸續補充

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章