建構函式是類中特殊的乙個成員函式,主要用來在建立物件時初始化物件, 即為物件成員變數賦初始值。
下面我們給出一段**:
class point
void movepoint(int a, int b)
void print() };
int main()
我們可以看到在point類中,我們定義了乙個名字與類名相同的函式point(),這個函式就是我們所說的建構函式,我們通過這個point()函式在main()函式中初始化了乙個物件point1。當然除此之外,我們也可以自己定義乙個setpoint()函式用於來構造變數,如下:
void setpoint(int x, int y)
但是如果每次建立物件都通過呼叫setpoint方法就顯得太麻煩,而建構函式可以使我們在物件建立時就把資訊設定進去。
1.建構函式的命名必須和類名完全相同。
2.建構函式的功能主要用於在類的物件建立時定義初始化的狀態。它沒有返回值,也不能用void來修飾,這就在一方面保證了它的安全性。
3.建構函式不能被直接呼叫,必須通過new運算子在建立物件時才會自動呼叫。我們也可以理解為物件例項化時編譯器自動呼叫對應的建構函式。
4.建構函式可以過載。
在建構函式中如果將類成員名稱用作建構函式的引數名是錯誤的。建構函式的引數表示的並不是類成員,而是賦給類成員的值。因此,引數名不能與類成員相同,如下圖是乙個錯誤的**:
class point
private:
int a;
int b;
};
為了避免這種狀況,我們可以在成員名中使用字首_。
c++中有兩種使用建構函式來初始化物件的方式。第一種是顯式的呼叫建構函式,如下:
point point1=point(10, 10);
第二種就是隱式的呼叫建構函式:
point point1(10, 10);
我們可以看出來第二種方式更加的簡潔、緊湊。建構函式的使用方法不同於其他類的方法,我們通常通過物件來呼叫方法,但是我們無法使用物件來使用建構函式,因為在建構函式構造物件之前,物件是不存在的。
無參的建構函式和全預設函式都被稱為預設建構函式,並且預設函式在類中只能有乙個。如下:
class point
void print()
private:
int _x;
int _y;
};int main()
**執行是成功的也就是說明point1物件成功的初始化,當然值得注意的是point point1後面不能有()。
那麼如果說使用者沒有定義乙個顯式的建構函式,那會怎麼樣呢?
其實c++編譯器會自動生成乙個無參的預設建構函式,一旦使用者顯示定義編譯器就不再生成。
class point
void print()
private:
int _x;
int _y;
};int main()
上面的功能就像int x;一樣,但是如果定義了非預設建構函式,但沒有提供預設的建構函式,point point1這一句宣告將會出錯,編譯器在此條件上禁止建立未初始化物件。
c++把型別分成內建型別和自定義型別。內建型別就是語法已經定義好的型別,比如int/char/double等,自定義型別就是我們在使用class/struct自己定義的型別
類的建構函式
引題 定義乙個型別 circle,圓 成員 圓心座標 x,y 半徑radius class circle 如何讓乙個物件在被建立的時候,就賦予初始值 方法是建構函式 建構函式是類的一種特殊的成員函式 1.函式名與類名必須相同 2.沒有返回值 egclass circle 建構函式可以帶引數,也可以過...
類的建構函式
1 建構函式可以和普通函式一樣有引數,但不能有返回值。2 實際應用中,如果沒有給類定義建構函式,則編譯系統將為該類生成乙個預設的建構函式,該預設的建構函式沒有引數,值是將物件中的所有例項變數都初始化為0 3 建構函式可以有預設引數,也可以不帶引數。關於this指標的乙個精典回答 當你進入乙個房子後,...
類的建構函式
有的類可以有建構函式,有的可以沒有建構函式,如果沒有建構函式,編譯器會自動給類新增乙個預設的建構函式,此建構函式什麼也做。預設建構函式是無參的,因為呼叫它的時候什麼也不需要去做,建構函式提供了在建立物件的時候初始化資料。當然還有一種初始化 塊的方法,初始化 塊在建構函式之前執行。看 public c...