建構函式主要是用來建立物件時為物件賦初值來初始化物件。總與new運算子一起使用在建立物件的語句中 。a a=new a();
建構函式具有和類一樣的名稱;但它是乙個函式具有函式的所有特性,同乙個類裡面可以有多個引數不同的建構函式,也就是函式的多型。
建構函式是在例項化類時最先執行的方法,通過這個特性可以給物件賦初值。
建構函式沒有返回值,也不能用void修飾,只有訪問修飾符。
每個類中都會乙個建構函式,如果使用者定義的類中沒有顯式的定義任何建構函式,編譯器就會自動為該型別生成預設建構函式,類裡面沒有建構函式也可以,系統會為你自動建立無參建構函式。
例:class test //test類
public test()
//建構函式,初始化物件
建構函式,目的是用於初始化類。比如你定義了乙個類a
class a
那麼建構函式寫法就是
public a() //括號內可以有引數
//用於初始化的語句(沒有引數就叫做預設建構函式)
//注意:乙個類可以有多個建構函式,可根據其引數個數的不同或引數型別的不同來區分它們 即建構函式的過載。
每次要用類a時,比如 a a = new a(); //如果前面定義的建構函式有引數,那這裡必須傳參
建構函式不能被直接呼叫,必須通過new運算子在建立物件時才會自動呼叫;而一般的方法是在程式執行到它的時候被呼叫的;每次例項化(既上面的new a())乙個類時,就會呼叫建構函式。
雖然在一般情況下,建構函式不被顯式呼叫,而是在建立物件時自動被呼叫。但是並不是不能被顯示呼叫。有些時候是一定要顯示呼叫的,只要是父類有帶參的建構函式,在子類中就必須顯示的呼叫父類的建構函式,因為子類的構造器在例項化時無法找到父類的建構函式(當父類有自己寫的無參建構函式時,子類也不用顯示呼叫)。
建構函式的過載:所謂過載,就是引數列表不同的幾個同名方法,建構函式的過載其實和方法的過載沒什麼太大的區別,無非訪問修飾符為public ,沒用返回值型別。下面寫乙個小例子:
1 class animal
2 19 //建構函式過載
20 public animal()
21 23 public animal(string name, string color)
24 28 public animal(string name, string color, int speed)
29 37 //名稱
38 private string name;
39 public string name
40 42 set
43 }
44 //顏色
45 private string color;
46 public string color
47 49 set
50 }
51 //速度
52 private int speed;
53 public int speed
54 56 set
57 }
58 //方法的過載run方法的不同實現
59 public void run()
60 64 public void run(int speed)
65 71 }
結果如下圖所示:run方法的兩種過載實現是一樣的。
mysql 建構函式 建構函式 prototype
functionstart uname,age var zjl new start zjl 41 var reol new start reol 22 以上的建構函式中,new了zjl和reol兩個物件,存在乙個sayhai的方法,二者的內容一樣,但由於方法為複雜資料型別,會分別開闢乙個新的記憶體空...
建構函式 拷貝建構函式 賦值建構函式
class和struct很大乙個區別在於,c除了成員的訪問控制許可權,struct中的成員預設是public,而class中的field預設是private class還有乙個special的地方是它有建構函式 constructor。建構函式是class中的一員,和成員變數 其他成員函式一起構成乙...
構造函式呼叫建構函式
題目如下 問下列 的列印結果為0嗎?include stdlib.h include iostream using namespace std struct clscls int main 列印結果是不定的,不一定為0 奇怪的地方在於建構函式中呼叫了自己的另乙個建構函式 我們知道,當定義乙個物件時,...