C 中的建構函式

2022-08-18 10:36:08 字數 1730 閱讀 5831

1,c++ 中類的真正形態是通過 class 這個關鍵字來定義的;

2,物件中成員變數的初始值是多少?

1,通過下面的小實驗來說明問題;

3,小實驗:

1,下面的類定義中成員變數 i 和 j 的初始值是什麼?

1 #include 2

3class

test410

int getj()

11};

1213

test gt;

1415

intmain()

16

1,自定義資料型別也是資料型別,所以要遵循 c++ 語言中對資料型別的所有可用特性和操作;

2,所以可以定義乙個指標指向乙個類的物件;

3,類定義得到的是資料型別;

4,物件的初始化:

1,從程式設計角度,物件只是變數,因此:

1,在棧上建立物件時,成員變數初始為隨機值;

2,在堆上建立物件時,成員變數初始為隨機值;

3,在靜態儲存區(包括全域性物件和 static 修飾的區域性物件)建立物件時,成員變數初始值為 0 值;

2,生活中的物件都是在初始化後上市的;

3,初始狀態(出廠設定)是物件普遍存在的乙個狀態;

4,一般而言,物件都需要乙個確定的初始狀態,解決方案:

1,在類中提供乙個 public 的 initialize 的函式;

2,物件建立後立即呼叫 initialize 函式進行初始化;

5,初始化函式程式設計實驗:

1 #include 2

3class

test410

int getj()

1112

void initialize() //

對成員變數進行指定

1317

};18

19test gt;

2021

intmain()

22

6,存在的問題:

1,initialize 只是乙個普通函式,必須顯示呼叫;

2,如果未呼叫 initialize 函式,執行結果是不確定的;

3,要麼忘記呼叫,要麼呼叫順序出錯,是否可以建立了之後自動呼叫;

5,建構函式:

1,c++ 中可以定義與類名相同的特殊成員函式,這種特殊的成員函式叫做建構函式:

1,建構函式沒有任何返回型別的宣告;

2,建構函式在物件定義時自動被呼叫;

2,建構函式初探程式設計實驗:

1 #include 2

3class

test410

int getj()

1112 test() //

無返回值,名字和類名相同,這是特殊之處;相對於普通函式功能在於在類建立的時候自動呼叫;

1321

};22

23test gt;

2425

intmain()

26

1,實驗結果說明,物件建立之後,建構函式就會被立即的呼叫執行;

2,編譯器在編譯程式的時候,會敏感的發現我們定義了建構函式,於是在建立物件的地方,就敏感的為我們自動呼叫了;

6,小結:

1,每個物件在使用之前都應該初始化;

1,初始化在物件導向當中的術語叫構造;

2,類的建構函式用於物件的初始化;

3,建構函式與類同名並且沒有返回值;

4,建構函式在物件定義時自動被呼叫;

C 中構造函式呼叫建構函式

include include using namespace std struct cls cls int main 列印結果是不定的,不一定為0 奇怪的地方在於建構函式中呼叫了自己的另乙個建構函式 我們知道,當定義乙個物件時,會按順序做2件事情 1 分配好記憶體 非靜態資料成員是未初始化的 2 ...

C 中構造函式呼叫建構函式

include stdlib.h include iostream using namespace std struct clscls int main 列印結果是不定的,不一定為0 奇怪的地方在於建構函式中呼叫了自己的另乙個建構函式 我們知道,當定義乙個物件時,會按順序做2件事情 1 分配好記憶體...

c 中構造函式呼叫建構函式

c 中建構函式完成的工作分兩步 1 分配空間 2 初始化空間 構造函式呼叫建構函式。class a a int a private int a 這樣會導致,a 中先分配了空間,然後呼叫a 0 又建立了乙個臨時物件,然後初始化為0,而原物件則沒有初始化。這種問題在類中有指標需要分配空間時會導致災難。從...