繼續!
建構函式和析構函式都是類的成員函式,但它們是特殊的成員函式,不用呼叫便自動執行,而且這些函式的名字與類的名字有關。
建構函式是一種用於建立物件特殊的成員函式,當建立物件時,系統自動呼叫建構函式,不能在程式中直接呼叫。建構函式名與類名相同,乙個類可以擁有多個建構函式(過載),建構函式可以有任意型別的引數,但不能具有返回型別。
建構函式的作用是:為物件分配空間;對資料成員賦初值;請求其他資源。
如果乙個類沒有定義建構函式,編譯器會自動生成乙個不帶引數的預設建構函式,其格式如下:
《類名》::《預設建構函式名》()
在程式中定義乙個物件而沒有指明初始化時,編譯器便按預設建構函式來初始化該物件。
當乙個物件消失,或用new建立的物件用delete刪除時,由系統自動呼叫類的析構函式。析構函式名字為符號「~」加類名,析構函式沒有引數和返回值。乙個類中只可能定義乙個析構函式,所以析構函式不能過載。
析構函式是用於取消物件成員函式,當乙個物件作用域結束時,系統自動呼叫析構函式。
析構函式的作用是進行清除物件,釋放記憶體等。
當物件超出其定義範圍時(即釋放該物件時),編譯器自動呼叫析構函式。在以下情況下,析構函式也會被自動呼叫:
如果乙個物件被定義在乙個函式體內,則當這個函式結束時,該物件的析構函式被自動呼叫。
若乙個物件是使用new運算子動態建立的,在使用delete運算子釋放它時,delete將會自動呼叫析構函式。
如同預設建構函式一樣,如果乙個類沒有定義析構函式,編譯器會自動生成乙個預設析構函式,其格式如下:
《類名》::~《預設析構函式名》()
預設析構函式是乙個空函式。
帶引數的建構函式可以在建立物件時,用具體數值初始化資料成員和各種資料元素。
注意:建構函式的引數個數和型別規定了宣告乙個物件時,為對這個物件進行初始化所需要的初始值的個數和型別。
例如:
location a (100,200) ; // ok
location b (10) ; // error
location a ; // error
若有多個過載建構函式,系統自動尋找匹配。
建構函式可以像普通函式一樣被過載,c++根據說明中的引數個數和型別選擇合適的建構函式。若類 x 具有乙個或多個建構函式,建立類 x 的物件時,c++會根據引數選擇呼叫其中乙個。
建構函式可以使用預設引數,但謹防二義性。
使用建構函式的限制:不能被繼承,不能說明為虛函式,不能顯式呼叫,不能取建構函式的位址
c++允許以下3 種資料初始化方法:
初始值表:適用於結構和陣列的初始化。
例如:struct conf
cpp[ ]=
賦值表示式:適用於簡單變數或指標型別的初始化。
例如:int i = 1 ;
char *p = 「no. 1」 ;
表示式表:與賦值表示式語義相同,風格不一樣。
例如:int i (1) ;
char *p ( 「no. 1」 ) ;
建構函式的初始化主要採用表示式表的方法。
c++中,類的初始化分為兩種情況:
對僅有公有段成員,而沒有建構函式或基類的類物件,用初始值表來表示。典型例子是結構。
帶有建構函式的類的初始化。
例如:class x
;main ( )
初始化時,建構函式可用兩種方式把值賦給成員:
接受該值作為參量,並在建構函式體內賦給其成員。
例如:class x
}使用函式體前的初值表(冒號語法)。
例如:代替函式體內對一般成員賦值示例。
class x;}
重要:c++程式的記憶體布局
c++程式的記憶體格局通常分為四個區:
全域性資料區(data area)
存放全域性變數、靜態資料、常量。
**區(code area)
存放類成員函式、其他函式**。
棧區(stack area)
存放區域性變數、函式引數、返回資料、返回位址。
堆區 (heap area) 。
自由儲存區。
C 學習第二天
方法的可選引數 static void main string args static void testinfo int a 158,int b 10,float f 0.8f b f a,b,f 下面這個方法中形式引數a為必選引數,換句話說當呼叫該方法時,至少是int a 118 testinf...
C 第二天學習
1.今天oj上開了 類 專題的題,做了幾個簡單的題,感覺上面的題還是比較水的,不過b題還是wa了4次。然後又看了一下課本上關於類的知識點,覺得類這種資料形式使資訊隱藏變得現實,只有類裡public下的函式可以使用private下的資料,如果沒有介面的話,這樣的乙個類就真的 隱藏 了。不過這樣就沒意義...
C 學習第二天
1.c語言的輸入輸出 define crt secure no warnings include include int main 2.c 的輸入和輸出 include include using namespace std void main 1.第乙個是我們 include他引用了沒有.h檔案這...