C++中有這麼一種特殊的函數,它在類別裡,與類別名稱同名,且沒有傳回值的一個函數,只要我們定義一個類別的對象,系統就會自動呼叫它,進行專門的初始化對像用,而大多數情況下,因為我們沒有定義建構函數,系統會預設產生一個預設形式、隱藏著的建構函數,這個建構函數的函數體是空著的,因此不具有任何功能。
那麼下來,我們將教大家如何定義自己的構造函數,需要用戶自行定義了至少一個構造函數,系統就不在自動生成,而是根據用戶定義的構造函數選擇最匹配的一個進行呼叫。
例如還是Student類別的例子,我們加入一個帶有預設參數的建構函數,程式碼如下:
#include<iostream>#include<Cstring>usingnamespacestd;classStudent{private:intnum;//學號charname[100];//名字intscore;//成績public:Student(intn,char*str,ints);intprint( );intSet(intn,char*str,ints);};Student::Student(intn,char*str,ints){nu m=n;strcpy(name,str);score=s;cout<<Constructor<<endl;}intStudent::print(){cout<<num<<<<name<<<<score;return0;}intSt udent::Set(intn,char*str,ints){num=n;strcpy(name,str);score=s;}intmain(){StudentA(100,dotcpp,11);A.print();return0 ;}
即可以在定義的同時呼叫建構函數,實現初始化的作用,運行如下圖:
要注意的是,由於我們已經在類別中定義了一個帶有預設參數的建構函數,則系統不會再自動生成,而這個時候我們定義物件的時候也需要傳入三個預設初始值,因為建構子可以重載,系統會找最匹配的一個函數,但如果定義時不是帶預設參數的建構函數,則會報錯,請大家自行上機實驗!