建構函式、析構函式與賦值函式是每個類最基本的函式。它們太普通以致讓人容易麻痺大意,其實這些貌似簡單的函式就象沒有頂蓋的下水道那樣危險。
每個類只有乙個析構函式和乙個賦值函式,但可以有多個建構函式(包含乙個拷貝建構函式,其它的稱為普通建構函式)。對於任意乙個類
a,如果不想編寫上述函式,
c++編譯器將自動為
a產生四個預設的函式,如
a(void);//
預設的無引數建構函式
a(const a &a);//
預設的拷貝建構函式
~a(void);//
預設的析構函式
a & operate =(const a &a); //
預設的賦值函式
這不禁讓人疑惑,既然能自動生成函式,為什麼還要程式設計師編寫?
原因如下: (
1)如果使用「預設的
無引數建構函式」和「預設的析構函式」,等於放棄了自主「初始化」和「清除」的機會,c++發明人stroustrup的好心好意白費了。 (
2)「預設的拷貝建構函式」和「預設的賦值函式」均採用「位拷貝」而非「值拷貝」的方式來實現,倘若類中含有指標變數,這兩個函式注定將出錯。
類的建構函式 析構函式與賦值函式
建構函式 析構函式與賦值函式是每個類最基本的函式。它們太普通以致讓人容易 麻痺大意,其實這些貌似簡單的函式就象沒有頂蓋的下水道那樣危險。每個類只有乙個析構函式和乙個賦值函式,但可以有多個建構函式 包含乙個拷貝 建構函式,其它的稱為普通建構函式 對於任意乙個類a,如果不想編寫上述函式,c 編譯器將自動...
類的建構函式 析構函式 賦值函式
1.編寫類string的建構函式 析構函式和賦值函式 25分 已知類string的原型為 class string public string const char str null 普通建構函式 string const string other 拷貝建構函式 string void 析構函式 s...
類的建構函式 析構函式 成員函式與賦值函式
類的建構函式 1 預設的拷貝建構函式 和 預設的賦值函式 均採用 位拷貝 而非 值拷貝 的方式來實現,若類中含有指標變數,不能採用預設的方式。2 如果類存在繼承關係,派生類必須在其初始化表裡呼叫基類的建構函式。3 類的const 常量只能在初始化表裡被初始化,因為它不能在函式體內用賦值的方式來初始化...