part 1:
靜態類成員特點:
無論建立了多少物件,程式都只建立乙個靜態類變數副本。也就是說,類的所有物件共享乙個靜態成員。
靜態資料成員在類宣告中宣告,在包含類方法的檔案中初始化。初始化時使用作用域運算子來指出靜態成員所屬的類。
但如果靜態成員是const整數型別或列舉型,則可以在類宣告中初始化。
part 2:在建構函式中使用new時注意事項
1、 new && delete
如果在建構函式中使用new來初始化指標成員,則應在析構函式中使用delete;
new和delete必須相互相容。new對應於delete,new對應於delete;
如果有多個建構函式,則必須以相同的方式使用new,要麼都帶中括號,要麼都不帶,因為只有乙個析構函式,所有的建構函式都必須與它相容;然而,可以在乙個建構函式裡使用new初始化指標,而在另乙個建構函式裡將指標初始化為空,這是因為delete可以用於空指標。
2、 demo
class act;
…act nice; //外部物件
…int main()
…delete pt;
}說明:
執行到定義**塊末尾時,將呼叫自動對應的up的析構函式
對指標pt應用運算子delete時,將呼叫動態物件*pt的析構函式
整個程式結束時,將呼叫靜態物件nice的析構函式
如果物件是靜態變數,則在程式結束時將呼叫物件的析構函式。
part 3: 複製建構函式
應定義乙個複製建構函式,通過深度複製將乙個物件初始化為另乙個物件。
應當定義乙個賦值運算子,通過深度複製將乙個物件複製給另乙個物件。
demo:
string::string(const string & st) //st是新的物件
/*檢查自我賦值的情況
釋放成員指標以前指向的記憶體
複製資料而不僅僅是資料的位址
並返回乙個指向物件的引用
*/string & string::operator=(const string & st)
delete str;
len=st.len;
str=new char[len+1];
std::strcpy(str,st_str);
return *this;
}
類和動態記憶體分配
整理自 c primer plus vector force1 50,60 vector force2 10,70 vector max max max force1,force2 version1 vector max const vector v1,const vector v2 version...
C 類和動態記憶體分配
預設析構函式 複製建構函式 賦值運算子 位址運算子 ifndef zhumeng h define zhumeng h include class zhumeng endif include zhumeng.h int zhumeng numm 0 zhumeng zhumeng zhumeng z...
C 類和動態記憶體分配
如果有這樣的strbad類 include ifdef strbad h define srebad h class strbad endif include include stringbad.h using std cout int strbad num 0 靜態成員變數不能在宣告中初始化 除非...