C 學習筆記(二)

2021-08-03 03:12:26 字數 2009 閱讀 1906

建構函式和析構函式

建構函式和析構函式是類的兩個特殊成員函式。

建構函式與複製建構函式

乙個物件的資料成員反映了物件的屬性,它們的值描述了物件所處的狀態。但在類的定義中,無法用表示式初始化這些資料成員,因而在說明乙個物件時,其初始狀態是不穩定的。在建立物件時,應對該物件進行初始化。c++語言在建立乙個物件時,通過系統自動呼叫建構函式對所建立的物件進行初始化。物件(資料成員)的初值通過自動呼叫建構函式取得,也可以通過賦值或呼叫已有的陳谷原函式來改變它。

建構函式的特點:

建構函式是一種成員函式。它不僅具有陳冠函式的特性,還有其自身的特點。建構函式的特點如下:

1)該函式的名字與類名相同。

2)建構函式無返回值,因此不許定義建構函式的返回值型別,其中包括void型別。

3)該函式可以有乙個或多個引數,頁可以無引數。無引數的建構函式稱為預設建構函式。

4)該函式通常在建立物件時系統自動呼叫。如果類內沒有定義建構函式,系統會自動定義預設的建構函式。

5)乙個類可以由多個建構函式,過載建構函式尤其引數個數、型別及排列順序進行區分。

例如:

point(void)  //無參建構函式

point(float x, float y) //兩個引數的建構函式

建構函式的設計及應用

一般情況下,在說明類中的私有資料成員時不初始化其值,需要在定義(建立)物件時正式初始化,以確認物件的有效性。採取顯示呼叫或塵緣函式進行物件初始化容易發生遺漏,因此採用由系統自動呼叫建構函式可以避免這種情況。當乙個類的不同物件需要不同的初始化時,要由不同的建構函式來完成;一種是不帶引數的建構函式稱為預設的建構函式;另一種是帶引數的建構函式。

(1)預設建構函式

《函式名》()
其中函式名與類名相同。預設建構函式有兩種,一種是系統自動提供的,當定義乙個類且類體內沒有定義任何建構函式時,系統將提供預設建構函式,函式體為空。它用來給建立的物件初始化,使物件中的不同型別的資料成員具有預設值或無意義值。另一種是使用者定義的不帶引數的建構函式,這種預設建構函式的函式體可以根據需要定義一些內容。

(2)引數化的建構函式

當建立乙個物件時,常需要通過傳遞一定的資料來對其中的某些資料初始化,實現這一點,需要帶引數的建構函式來完成,在定義物件時通過不同引數值的傳遞,來實現對不同物件的不同初始化。

在定義建構函式時,可以給函式引數指定預設值。在函式呼叫者不確定引數時,被定義的的預設值可以作為預設引數值來用。

複製建構函式

複製建構函式是一種特殊的建構函式——只有乙個引數,並且引數是該類物件的引用。其主要功能就是在初始化時被呼叫,以便將乙個一直物件的資料成員的值複製給正在建立的另外乙個同類的物件。*例如,當函式返回乙個物件或用乙個物件初始化另乙個物件時,都呼叫該複製建構函式。*

複製建構函式的定義格式如下:

《建構函式名》 (《類名》&《引用名》)
其中,函式名與該類的類名相同,該函式的引數是該類物件的引用,並且只有乙個引數。

析構函式

析構函式也是一種特殊的成員函式,其功能是用來釋放所建立的物件,主要用來完成物件被刪除前的一些清理工作。例如,乙個視窗物件在撤銷時,需要恢復螢幕上原先被覆蓋的內容,並釋放由建構函式分配的記憶體等。析構函式在物件的生存期即將結束時由系統自動呼叫。

析構函式的名字與類名相同,與建構函式的區別是名字前加乙個符號「~」,表明他與建構函式的功能相反。析構函式也沒有函式返回型別。

其定義格式如下;

~《函式名》
其中,函式名與類名相同。如果乙個類中沒有定義析構函式,系統會自動生成乙個預設析構函式,函式體為空。析構函式一般為公有函式,其函式體可以在類體內定義,也可以在類體外定義。乙個類只有乙個析構函式,析構函式沒有引數,不能過載,定義析構函式時不必給出函式返回型別。

先建立的物件後析構,後建立的物件先析構。(先進後出)

C 學習筆記(二)

在學習最新的c 標準過程中會碰到很多新問題,這些問題有時候很難理解為什麼會發生。更奇怪的是,似乎跟開發工具有關。如下面這個在vs2005下的例子 word istatus ifstream ifs if i it szprlfile,0 0 std locale global std locale ...

C 學習筆記二

chapter22 滾動字幕程式 1.ondraw函式中寫畫得內容.使用invalidate 或者 invalidaterect 重新整理 觸發ondraw 得呼叫.2.windows不允許直接 訪問顯示硬體 我們必須通過和視窗 關聯得 裝置環境 跟顯示硬體 通訊 裝置環境由c 得cdc類 物件表示...

C 學習筆記(二)

本期話題 字串文字常量,指標,引用 1 關於字串文字常量 sizeof bohr 5 字串文字常量的型別是 適當個數的const字元的陣列 所以 bohr 的型別就是const char 5 下面的賦值是可以的 char p bohr 因為在c c 原來的定義裡,字串文字常量的型別就是char 字串...