類的初始化 賦值和析構

2022-09-12 14:15:28 字數 1558 閱讀 9186

一般情況下,對於類的初始化操作,使用建構函式來完成類的初始化操作。要想理解和學習類的初始化,主要要弄明白如下幾個問題:

(1)c++提供了哪些初始化類的方法?

(2) 為什麼要建構函式來初始化類?

(3) 使用建構函式初始化類具體做什麼?

c++提供兩類對於類的初始化方法:

第一類:從c語音繼承來的顯示初始化列表;

class

data

;data local2 = ;

缺點:優點:

第二類:建構函式

建構函式的概念從很多地方都可以找到,我的理解為,建構函式是c++為程式設計師提供的自動的初始化類的工具(需要程式設計師顯示的指定)。

那麼既然是c++為我們提供的工具,那麼我們該如何使用,並且應該注意什麼呢?

(1)如何定義建構函式

建構函式是類中有類同名的函式,是沒有返回值的函式,具體的功能為實現類成員變數的初始化。對於初學者來說,很容易有如下誤解:

(2)系統不會預設的為乙個類提供預設建構函式,如果乙個類沒有定義相關的建構函式,那麼再使用這個類的時候,類的成員變數是沒有初始化的(上面已經說了,這裡著重所一下;

第三類:預設按成員初始化

第四類:預設按成員賦值

一般情況下,使用類的建構函式對於類的來進行初始化操作。個人覺得,類的初始化操作,主要是由於如下兩個層面的部分考慮;

1:方便程式設計師高效程式設計;

舉例一(一般情況下的使用):

class

demo

;  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 保險...