c++中重要的是類的構造,對乙個事物抽象,得到其本質的東西(所謂本質,放之四海而皆準)。類也無非對一些資料與函式的封裝。對於類中的建構函式、析構函式有其固有的特點。
故總結如下:
建構函式和析構函式是在類體中說明的兩種特殊的成員函式。建構函式是在建立物件時,使用給定的值來將物件初始化。
析構函式的功能正好相反,是在系統釋放物件前,對物件做一些善後工作。
建構函式是一種特殊的成員函式,與其他成員函式不同,不需要使用者來呼叫它,而是在建立物件時自動執行。建構函式的名字必須與類名同名,而不能由使用者任意命名,以便編譯系統能識別它並把它作為建構函式處理。它不具有任何型別,不返回任何值。建構函式的功能是由使用者定義的,使用者根據初始化的要求設計函式體和函式引數。
1. 建構函式的函式名必須與類名相同。建構函式的主要作用是完成初始化物件的資料成員以及其它的初始化工作。 建構函式不需要使用者呼叫,也不能被使用者呼叫。建構函式是在建立物件時由系統自動執行的,而且只執行一次。
2. 在定義建構函式時,不能指定函式返回值的型別,也不能指定為void型別。
3. 乙個類可以定義若干個建構函式。當定義多個建構函式時,必須滿足函式過載的原則。
(過載函式是函式的一種特殊情況,為方便使用,
c++允許在同一範圍中宣告幾個功能類似
的同名函式,但是這些 同名函式的
形式引數
(指引數的個數、型別或者順序)必須不同。(下
面兩個即是過載,可方便不同物件的初始 化))
4.建構函式可以指定引數的預設值。
5.若定義的類要說明該類的物件時,建構函式必須是公有的成員函式。如果定義的類僅用於派生其它類時,則可將 建構函式定義為保護的成員函式。
6.沒有定義建構函式時,預設的建構函式並不對所產生物件的資料成員賦初值;即新產生物件的資料成員的值是不 確定的。
7.不存在沒有建構函式的物件!
8.產生物件時,系統必定要呼叫建構函式。所以任一物件的建構函式必須唯一。(此處的唯一不是指只有乙個構造 函式,意思是只能呼叫乙個)
2、當使用者希望對不同的物件賦予不同的初值時可這樣:
可以有預設引數的成員函式,若形參不完全預設,則必須從形參的右邊開始預設。)
3、也可利用引數初始化列表的形式
如果在乙個函式中定義了乙個物件(它是自動區域性物件),當這個函式被呼叫結束時,物件應該釋放,在物件釋放前自動執行析構函式。(注意不是物件使用完了就立即釋放)
呼叫建構函式和析構函式的順序:先構造的後析構,後構造的先析構。相當於棧。
C 之建構函式與析構函式
首先,在棧裡宣告兩個物件bs sc,看看編譯器是如何自動呼叫的。includeusing namespace std class base base 執行結果顯示 first construct in base second construct in base construct in subcla...
C 之建構函式與析構函式
最近在學習c 每次看到繼承這段的時候,總是一邊感慨這門語言的難度,一邊感慨這門語言的神奇之處。最近看到了建構函式這段,問了自己這樣乙個問題,建構函式可以是虛函式嗎?不是很清楚,於是去查了一些資料。首先我覺得應該明確的乙個問題就是,虛函式的功能是c 中多型的一種實現方式。主要是繼承類的某些功能和基類的...
c 之建構函式與析構函式
建構函式 建構函式的原型和函式頭有乙個特徵 雖然沒有返回值,但沒有被宣告為void,實際上建構函式不允許宣告型別的。例子 stock stock const char co,int n,doublem 當建立物件初始化賦值有兩種方式 1.stock food stock adsfdsa 1,5.0 ...