c 中的特殊成員函式

2021-10-10 07:25:14 字數 1640 閱讀 3563

如果沒有提供任何建構函式,c++將建立預設建構函式。例如假設定義了乙個k類,但沒有提供任何建構函式,編譯器則提供下面的預設建構函式

k::k(

)

也就是說,編譯器將提供乙個沒有引數的建構函式,不接受任何引數,也不執行任何操作的建構函式。這是因為建立物件的時候總會呼叫建構函式。

k k//建立乙個物件使用預設構造引數,他的值在初始化的時候是未知的。
如果定義了建構函式,那麼編譯器就不會定義預設的建構函式。如果希望在建立物件的時候不顯示的對他進行初始化,那麼我們就必須顯示的定義預設構造引數。帶引數的建構函式也可以是預設建構函式,只要所有的引數都有預設的值就可以例如

k(int n=0)

但是只能由乙個預設建構函式。

複製建構函式用於將乙個物件複製到新建立的物件中。也就是說,它用於初始化過程中(包括按值傳遞引數),而不是常規的賦值的過程。類的複製建構函式原型通常如下:

class_name(const class_name &

);

接受乙個指向類物件的常量引用作為引數。

對於複製建構函式需要知道兩件事:何時呼叫、有何功能。

**何時呼叫:**新建乙個物件並將其初始化為同類現有物件時,複製建構函式都將被呼叫。在很多情況下都可能發生,常見的情況是將新物件顯示的初始化為現有的物件。例如motto是stringbad物件,則下面四種情況都將被呼叫複製建構函式:

stringbad ditto(motto)  //呼叫stringbad(const stringbad &

)stringbad metoo = motto;

stringbad also = stringbad(motto)

;stringbad *ptrstringbad = new stringbad(motto)

;

其中中間兩個宣告可能會使用複製建構函式直接建立metto和also,也可能使用複製建構函式生成乙個臨時物件,然後將臨時物件的內容賦給metto和also。

功能預設的複製建構函式逐個複製非靜態成員(成員複製也叫淺複製)複製的是成員的值。

預設的賦值運算子如下:

class_name & class_name::operator=

(const class_name &

)

何時使用將乙個已有的物件賦給另乙個物件時,將使用過載的賦值運算子:

stringbad headline1(

"nizhenshuai");

stringbad knot;

knot = headline1;

但是初始化物件時,並不一定會使用賦值運算子

stringbad metoo = knot;//使用複製構造,可能還有賦值
這裡metoo是乙個新建立的物件,被初始化為knot的值,因此使用複製建構函式。然而,在前面指出,實現時可能分為兩步:1、使用複製建構函式建立乙個臨時變數,2、然後將臨時變數賦值給新物件。這說明了一定會使用複製建構函式。和複製建構函式一樣賦值運算子也是對成員逐個複製。

C 類的特殊成員函式

類的特殊成員函式 特殊成員函式的難點在於它們何時被呼叫,以及可能產生的一些問題。建構函式 每個類都有自己的建構函式,即使乙個建構函式都沒定義,編譯器也會自動生成預設建構函式。建構函式下面有細分的種類 建構函式 每個物件建立時,都會呼叫建構函式。如果物件是封閉類,那麼生成乙個物件時,先呼叫成員物件類的...

C 特殊函式和成員

物件成員的初始化 可以在乙個類中說明具有某個類的型別的資料成員,這些成員成為物件成員。在類a中說明物件成員的一般形式如下 class a 說明物件成員是在類名之後給出物件成員的名字。為初始化物件成員,a類的建構函式需要呼叫這些物件成員所在的類的建構函式,a類的建構函式的定義形式如下 a a 參數列 ...

特殊成員函式

特殊函式成員 1靜態成員函式 靜態成員函式體內不能使用非靜態的成員變數和非靜態的成員函式 只能呼叫靜態成員資料和函式 因為靜態屬於乙個類,而不是某個物件,所以沒有this指標 要想訪問成員變數和成員方法,需要在函式的引數中傳入乙個物件 include include include using na...