當建立乙個物件時,往往需要做一些初始化工作,例如對資料成員賦值等。為了解決這個問題,c++提供了建構函式。
建構函式(constructor)是一種特殊的成員函式,它的名字和類名相同,沒有返回值,不需要使用者呼叫(使用者也不能呼叫),而是在建立物件時自動執行。建構函式的作用是在建立物件時進行初始化工作,最常見的就是對成員變數賦值。
乙個建構函式的例子:
#include usingnamespace
std;
class
student;
//定義建構函式
student::student(char *name1, int age1, float
score1)
//定義普通成員函式
void
student::say()
intmain()
在類中我們定義了乙個建構函式 student(),它的作用是給3個 private 屬性的成員變數賦值。在 main 函式中,我們根據建構函式建立了乙個物件 stu;因為建構函式有引數,所以建立物件時要相應地傳入實參,形式類似於函式呼叫。
讀者要注意:一旦在類中定義了建構函式,那麼建立物件時一定會被執行;如果建構函式有引數,建立物件時就要傳參。
另外,建構函式主要用來進行初始化,沒有返回值(有返回值沒有任何意義),這就意味著:
如果使用者自己沒有定義建構函式,那麼編譯器會自動生成乙個預設的建構函式,只是這個建構函式的函式體是空的,也沒有引數,不執行任何操作。比如上面的 student 類,預設生成的建構函式如下:
乙個類,必須有建構函式,要麼使用者自己定義,要麼編譯器自動生成。一旦使用者自己定義了建構函式,不管它是 public 屬性的,還是 private、protected 屬性的,編譯器都不再自動生成。上面的 student 類,只有乙個建構函式,就是我們自己定義的。
和普通成員函式一樣,建構函式是允許過載的。乙個類可以提供多個建構函式,讓使用者在建立物件時進行選擇,編譯器會根據建立物件時傳遞的引數來確定呼叫哪乙個建構函式。也就是說:
#include usingnamespace
std;
class
student;
//定義建構函式
student::student(){}
student::student(
char *name1, int age1, float
score1)
//定義普通成員函式
void student::setname(char *name1)
void student::setage(int
age1)
void student::setscore(float
score1)
void
student::say()
intmain()
類中定義了兩個建構函式,乙個帶引數乙個不帶引數,它們是過載關係。當根據不帶引數的建構函式建立物件時,不需要傳參,成員變數不會被初始化,所以要呼叫成員函式來設定它們的值。
7 學習C 之類的建構函式
1.常見的建構函式 c 的類在建立物件的時候,都會去呼叫建構函式,這種行為是強制的。如果在類中沒去寫建構函式,程式會自動為你的類建立出建構函式,然後去呼叫他 這個建構函式的函式體是空的,也沒有形參,也不執行任何操作。如果你已經寫了建構函式,那麼程式在執行的時候會去呼叫你寫的建構函式。建構函式是可以被...
C 學習 建構函式
成員函式的一種 class complex 編譯器自動生成預設建構函式 complex c1 complex p new complex 上面兩個語句類的預設建構函式均被呼叫class a a a double r,double i a a1 缺少函式引數 a a new a 少參 a a 2 ok...
C 學習 建構函式
如果沒有為類顯式地定義乙個建構函式,則c 編譯器會自動生成乙個函式體為空的預設無參的例項建構函式。建構函式主要用於建立類的例項物件。當呼叫建構函式建立乙個物件時,建構函式會為物件分配記憶體空間,並初始化類的成員。建構函式分為例項建構函式和靜態建構函式兩種。例項建構函式用於建立和初始化類的例項。使用n...