第 9 章類的建構函式 析構函式與賦值函式索引

2021-06-22 02:41:02 字數 924 閱讀 7392

建構函式、析構函式與賦值函式是每個類最基本的函式。它們太普通以致讓人容易麻痺大意,其實這些貌似簡單的函式就象沒有頂蓋的下水道那樣危險。

每個類只有乙個析構函式和乙個賦值函式,但可以有多個建構函式(包含乙個拷貝建構函式,其它的稱為普通建構函式)。對於任意乙個類a,如果不想編寫上述函式,c++編譯器將自動為a 產生四個預設的函式,如

a(void); // 預設的無引數建構函式

a(const a &a); // 預設的拷貝建構函式

~a(void); // 預設的析構函式

a & operate =(const a &a); // 預設的賦值函式

這不禁讓人疑惑,既然能自動生成函式,為什麼還要程式設計師編寫?

原因如下:

(1)如果使用「預設的無引數建構函式」和「預設的析構函式」,等於放棄了自主「初始化」和「清除」的機會,c++發明人stroustrup 的好心好意白費了。

(2)「預設的拷貝建構函式」和「預設的賦值函式」均採用「位拷貝」而非「值拷貝」的方式來實現,倘若類中含有指標變數,這兩個函式注定將出錯。

對於那些沒有吃夠苦頭的c++程式設計師,如果他說編寫建構函式、析構函式與賦值函式很容易,可以不用動腦筋,表明他的認識還比較膚淺,水平有待於提高。

本章以類string 的設計與實現為例,深入闡述被很多教科書忽視了的道理。string的結構如下:

class string;

9.1 建構函式與析構函式的起源

9.2 建構函式的初始化表

9.3 構造和析構的次序

9.4 示例:類string 的建構函式與析構函式

9.5 不要輕視拷貝建構函式與賦值函式

9.6 示例:類string 的拷貝建構函式與賦值函式

9.7 偷懶的辦法處理拷貝建構函式與賦值函式

9.8 如何在派生類中實現類的基本函式

9.9 一些心得體會

類的建構函式與析構函式

建構函式 對於類物件成員的初始化我們始終是建立成員函式然後手工呼叫該函式對成員進行賦值的,那麼在c 中對於類來說有沒有更方便的方式能夠在物件建立的時候就自動初始化成員變數呢,這一點對操作保護成員是至關重要的,答案是肯定的。關於c 類成員的初始化,有專門的建構函式來進行自動操作而無需要手工呼叫。類建構...

類的建構函式與析構函式

類的建構函式與析構函式 include 所有的類預設都有乙個建構函式,析構函式 建構函式,過載,沒有返回值,class myclass myclass int data 建構函式可以過載 myclass void run void main1 explicit 關鍵字 控制函式不能採用型別轉換 in...

編寫類String的建構函式 析構函式和賦值函式

編寫類string的建構函式 析構函式和賦值函式,已知類string的原型為 class string public string const char str null 普通建構函式 string const string other 拷貝建構函式 string void 析構函式 string ...