C 學習之路(第二天)

2021-09-24 09:43:52 字數 2010 閱讀 3719

繼續!

建構函式和析構函式都是類的成員函式,但它們是特殊的成員函式,不用呼叫便自動執行,而且這些函式的名字與類的名字有關。

建構函式是一種用於建立物件特殊的成員函式,當建立物件時,系統自動呼叫建構函式,不能在程式中直接呼叫。建構函式名與類名相同,乙個類可以擁有多個建構函式(過載),建構函式可以有任意型別的引數,但不能具有返回型別。

建構函式的作用是:為物件分配空間;對資料成員賦初值;請求其他資源。

如果乙個類沒有定義建構函式,編譯器會自動生成乙個不帶引數的預設建構函式,其格式如下:

《類名》::《預設建構函式名》()

在程式中定義乙個物件而沒有指明初始化時,編譯器便按預設建構函式來初始化該物件。

當乙個物件消失,或用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檔案這...