1,c++ 中類的真正形態是通過 class 這個關鍵字來定義的;
2,物件中成員變數的初始值是多少?
1,通過下面的小實驗來說明問題;
3,小實驗:
1,下面的類定義中成員變數 i 和 j 的初始值是什麼?
1 #include 23class
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 23class
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 23class
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,而原物件則沒有初始化。這種問題在類中有指標需要分配空間時會導致災難。從...