建構函式,我們應該叫他構造初始化函式,建構函式存在的意義就是初始化類的成員函式,它的出現替代了「直接初始化成員變數(成員變數得是public型別的)」與「間接使用類的成員函式初始化成員變數(類的成員變數初始化函式得是public型別的)」這兩種不太安全的初始化成員函式的方式,使得初始化成員函式更加智慧型,可以根據輸入引數的多少來進行初始化。而且一般的錯誤都是由於未初始化,或者初始化錯誤導致的,建構函式可以很好的解決這一點。
建構函式,初始化成員變數的成員函式與直接初始化成員變數這三種方式都可以初始化成員變數,但是我如果說「每個cstudent類的物件必須進行初始化,不初始化就報錯」,那除了建構函式,其他兩種方式都不能做到這一點。
用成員函式初始化成員變數:
#include #include using namespace std;
class cstudent
void out()
};
int main()
對public型別的成員變數進行賦值初始化:
#include #include using namespace std;
class cstudent
};
int main()
用建構函式進行初始化:
#include #include using namespace std;
class cstudent
};
cstudent::cstudent(int mark)
int main()
功能:實現輸入不同個數的初始化引數都能初始化成功
程式實現:
#include #include using namespace std;
class cstudent
};
cstudent::cstudent(int mark)
cstudent::cstudent()
cstudent::cstudent(int mark,string name)
int main()
① 建構函式是用來初始化成員變數的,不存在返回值更不同定於函式的返回值型別;
② 建構函式不需要使用者呼叫,也不應該被使用者呼叫(不是不能呼叫),它是物件建立的時候自動被系統呼叫,用來初始化剛剛建立的物件的;如下示例:
#include #include using namespace std;
class cstudent
};
cstudent::cstudent(int mark)
cstudent::cstudent()
cstudent::cstudent(int mark,string name)
int main()
③ 如果使用者沒有定義自己的類的建構函式,那麼系統會自動生成乙個預設的建構函式,只不過該建構函式的函式體是空的,也就是什麼都不做。就是我們在無任何初始化的情況下調式所看到全是一些隨機數和亂碼。
#include using namespace std;
int main()
; // 用new進行記憶體分配的時候,如果是陣列要用子程式塊進行初始化,而如果申請的是乙個記憶體空間,那只需要用()包圍即可
cout << *pstr - *(pstr + 1) << endl;
delete pstr;
// 對於動態申請的陣列空間必須使用delete來進行記憶體的釋放,如果使用的是delete也不會報錯,但是只是會釋放陣列內首個元素的記憶體,釋放不徹底,這樣是不對的
}
申請記憶體的函式
c語言跟記憶體申請相關的函式主要有 alloca,calloc,malloc,free,realloc等,都位於標頭檔案malloc.h中 注意沒有alloc函式 其中 alloca是向棧申請記憶體,因此無需釋放.malloc分配的記憶體是位於堆中的,並且沒有初始化記憶體的內容,因此基本上mallo...
C 中基類和派生類的建構函式以及變數的執行順序整理
整理了下c 中基類以及派生類的建構函式,變數宣告的執行順序。先上試驗 1class program212 13 基類 14classa15 28 建構函式 29public a 30 34 虛方法35 public virtual void m 3639 4041 派生類 42class b a 4...
關於初始化列表,父類建構函式以及子類建構函式
在stackoverflower上發現的乙個問題,覺得挺有意思,自己之前也沒有注意到,貼出來分享一下 這裡面的內容實在討論在子類的初始化列表中,如果對子類的成員變數進行初始化,然後呼叫父類的建構函式,那麼他們的執行順序會是什麼樣的,話不多說,碼來!includeusing namespace std...