C string類的實現

2022-07-05 17:54:12 字數 2225 閱讀 6193

​ 根據檔案之中提供的main()函式介面,在類的設計中,一共需要實現以下功能:

class string

;

1.1.思路

​ 根據main()介面,建構函式的引數應為const char*型別,預設為nullptr,引數傳入之後,首先呼叫strlen計算並開闢指定長度的空間,之後呼叫strcpy複製到開闢的空間之。假設傳入的是nullptr(預設引數),就開闢一塊長度為1的空間,儲存『\0』。

1.2.**實現

inline

string::string(const char*cstr)

else

}

2.1.思路

​ 顯式的過載之,引數為 string 型別,為了提高效率,引用傳遞,並使用 const 限定符修飾。和預設 copy ctor 相比(單純地複製指標),只需要開闢一塊新的空間複製以下對應的內容即可。

2.2.**實現

inline

string::string(const string&str)

3.1.思路

​ 採用成員函式實現的形式:**左指標指向的空間,根據右值的大小開闢一塊新的同樣大小的空間,呼叫strcpy實現賦值。

3.2.**實現

inline

string& string::operator=(const string& str)

4.1.思路

​ 建立乙個臨時指標指向陣列頭位址,利用記憶體連續,向後探查至尾位址,做差,利用char長度為乙個位元組計算出陣列長度。由於不可能為負數,返回乙個 unsigned int型別

4.2.**實現

inline

unsigned int string::strlen(const char* cstr)

5.1.思路

​ 核心就是兩個引數:char* dst和 char*src,我們編寫 strcpy() 的目的就是在以為首位址的空間中將空間為 src ~ src+strlen(src)中儲存的內容複製過去。這裡,我們需要考慮到的是,假設我們從低位址向高位址進行複製,是否會出現位址重疊的情況。因此,加上乙個位址重疊的判斷。並且為了實現鏈式表達,我們設定了指標型別的返回值,返回的是 dst 。

5.2.**實現

inline

char* string::strcpy(char *dst, const char *src)

//cnt是源字串的長度,利用記憶體連續的特點計算是否出現重疊

inline

char* string::memcpy(char *dst, const char* src, int cnt)

else //正常情況,從低位址開始複製

return ret;

}

6.1.思路

​ 設定為友元,可以直接呼叫 m_data(private資料) ,而在我們的類設計之中,char的最後一定是 『\0』,所以只需要直接輸出即可,並返回ostream&以實現鏈式輸出。

6.2.**實現

inline

std::ostream& operator<

7.1.思路

​ 設定為成員函式,實現拼接,所以就是返回乙個新的 string 型別的物件,它的長度是左運算元和右運算元的長度之和,呼叫兩次strcpy實現賦值即可。

7.2.**實現

inline

string string::operator+(const string&str)

8.1.思路

​ 沒什麼好說的,就...,把對應的 string 物件的private裡面的動態陣列刪除了就好。

8.2.**實現

C String類的實現

參考c primer.string類的實現,清翔兔 06,jan.include using namespace std class string string void private char m data inline string string const char str if str m...

C String類的實現

include using namespace std class string string void private char m data inline string string const char str inline string string const string other i...

c string類的實現

友元函式可以轉換左右運算元的順序,而成員函式必須保證左運算元string已經處於正確的形式。include include includeusing namespace std class string friend const string operator const string other1...