一般情況下,對於類的初始化操作,使用建構函式來完成類的初始化操作。要想理解和學習類的初始化,主要要弄明白如下幾個問題:
(1)c++提供了哪些初始化類的方法?
(2) 為什麼要建構函式來初始化類?
(3) 使用建構函式初始化類具體做什麼?
c++提供兩類對於類的初始化方法:
第一類:從c語音繼承來的顯示初始化列表;
classdata
;data local2 = ;
缺點:優點:
第二類:建構函式
建構函式的概念從很多地方都可以找到,我的理解為,建構函式是c++為程式設計師提供的自動的初始化類的工具(需要程式設計師顯示的指定)。
那麼既然是c++為我們提供的工具,那麼我們該如何使用,並且應該注意什麼呢?
(1)如何定義建構函式
建構函式是類中有類同名的函式,是沒有返回值的函式,具體的功能為實現類成員變數的初始化。對於初學者來說,很容易有如下誤解:
(2)系統不會預設的為乙個類提供預設建構函式,如果乙個類沒有定義相關的建構函式,那麼再使用這個類的時候,類的成員變數是沒有初始化的(上面已經說了,這裡著重所一下;
第三類:預設按成員初始化
第四類:預設按成員賦值
一般情況下,使用類的建構函式對於類的來進行初始化操作。個人覺得,類的初始化操作,主要是由於如下兩個層面的部分考慮;
1:方便程式設計師高效程式設計;
舉例一(一般情況下的使用):
classdemo
; class
demouser
;
類定義如上,demouser類包含多個demo類的成員,如果demo類有需要從堆上面申請空間的變數等初始化操作,那麼需要在demouser類中分別實現,並且由於demo類的型別相同,且有多個demo的成員變數,需要重複寫很多**,複雜、效率低、容易出問題且出現了問題不好定位,但是如果有demo類的相關的建構函式的話,那麼就可以將程式設計師從這些複雜又無用的操作中解放出來。
帶建構函式的版本如下:
#define default_str_len 10240 //預設的字串長度
class
demo
public
:
char *pneed_new_str1;
char *pneed_new_str2;
};class
demouser
public
: demo *use_demo1;
demo *use_demo2;
};注:
(1)作為demo,這裡省去了new的合法性判斷,預設new不會出錯,每次都成功;
(2)本例在建構函式中直接進行了空間的申請,意在說明方便性,考慮到一般情況下建構函式中只會對變數置null,在init函式中申請相關的空間,特在此處說明。
(就算是置null,也能重複體現出建構函式的方便性,只是new更容易讓大家理解);
舉例2(繼承層面的使用):
2:類的使用的安全性;
未完待續
c Primer 之 類的初始化,賦值和析構
14.1 類的初始化 型如下面這樣的類 class data 可用如下方式初始化,而不需要提供建構函式 data local1 稱為顯式初始化表 這是因為其資料成員都是公有的。對於大多數類而言,提供乙個建構函式初始化資料成員是乙個好的選擇。但是上面的初始化形式在 初始化大型資料結構,如調色盤類 時尤...
類的初始化和賦值
我的問題是關於初始化c 類成員的。我見過許多這樣的 包括在你的欄目中也見到過 csomeclass csomeclass x 0 y 1 而在別的什麼地方則寫成下面的樣子 csomeclass csomeclass x 0 y 1 我的一些程式設計師朋友說第二種方法比較好,但他們都不知道為什麼是這樣...
5 初始化器和析構器
物件初始化器 init方法是有返回值的,而且有時候返回值會是另乙個物件。因此,如果alloc與init分開寫時,需要對變數重新賦值。customclass c1 customclass alloc init customclass c1 customclass alloc c1 c1 init 保險...