C++ String部分成員模擬實現流程詳解
2022-08-29 14:02:18
string類的成員設計
class string { private: char* _str; int _size; int _capacity; };
說明:以下的五個成員函數的模擬實現,均去除了_size
和_capacity
成員變數,目的是為了更方便解釋重點。在五個成員函數模擬後,會對string類的設計進行補全。
普通建構函式的模擬
我們是否可以使用預設建構函式來初始化物件?在這種情況下是萬萬不能的!要記住預設的建構函式對自定義型別會去呼叫它自己的建構函式進行初始化,而對於內建型別是不做處理的,此時我們的成員變數_str
的型別是內建型別,不會被初始化,所以一定要自己寫建構函式。
//這種建構函式是否可行? string(const char* str) { _str = str; }
這種寫法做不到用字串構造一個物件。
原因:這樣會使得str
和_str
指向的都是同一塊空間。str會影響到_str.
所以正確的做法是,給_str
分配一塊屬於自己的空間,再把str
的值拷貝給_str.
string(const char* str) { _str = new char[strlen(str) + 1]; //要多給一個' '的空間 strcpy(_str, str); }
修一下小細節:
1.範例化物件的時候是支援無參構造的,所以可以給引數一個預設值""
,裡面自己隱藏的有一個