類的建構函式

2021-08-30 22:03:21 字數 1780 閱讀 7557

建構函式是類中特殊的乙個成員函式,主要用來在建立物件時初始化物件, 即為物件成員變數賦初始值。

下面我們給出一段**:

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...