建構函式的簡單解析

2021-07-23 05:32:34 字數 2054 閱讀 7854

建構函式主要有三個作用:1、構建物件;2、初始化物件;3、型別轉換。

當類中的物件被建立時,編譯系統會為變數分配空間,並且系統會呼叫建構函式完成物件的資料成員的初始化工作。

class count

private:

int value;

}

類似於上面的類,建構函式就是為了能夠完成物件的初始化。當然,如果我們沒有在類中像上面一樣顯示定義,那麼編譯器會自動生成乙個預設的預設的建構函式。如果你已經定義,那麼編譯器就不會再生成了。

初始化列表,顧名思義就是為了初始化的,以下面的**為例:

class date

date(int year, int month, int day)

:_year(year), _month(month), _day(day)

private:

int _year;

int _month;

int _day;

};

在這裡,你可以看到建構函式的初始化方法,分別用:和,進行操作,此外你可以看到建構函式的過載的使用。

過載的時候,以下面的為例,在呼叫的時候只需要傳不同的引數就好。

void test()

int main()

但是使用初始化列表需要注意一些方面:

1、初始化的順序必須與類中的成員宣告的次序一致,你在私有中如何定義的,那麼初始化的順序就要和其相同。

2、類中的成員只能被初始化一次。

另外,在初始化方面有個地方需要強調一下:對於加了const限定的變數、引用的變數、只能通過初始化列表來初始化。此外,如果乙個類中包含另乙個類的子物件,並且這個物件是未預設的,那麼也需要用初始化列表初始化。

以下面的**為例:

class date

date(int year, int month, int day)

:a(0), ra(_year)

void setdate(int year, int month, int day)

void printdate()

private:

int _year;

int _month;

int _day;

const int a;

int &ra;

};

對於

乙個類中包含另乙個類的子物件,並且這個物件是未預設的,例子如下:

class time

void printtime()

private:

int _hour;

int _minute;

int _second;

};class date

void setdate(int year, int month, int day)

void printdate()

private:

int _year;

int _month;

int _day;

time t;

};

1、對於無參的建構函式和帶預設值的建構函式,使用時一定要注意避免二義性。

以下面的**為例:

class date

date(int year = 1997, int month = 2, int day = 13)

void setdate(int year, int month, int day)

void printdate()

private:

int _year;

int _month;

int _day;

};void test()

int main()

這裡的d1就會產生二義性,因為編譯器無法判斷你到底是呼叫哪乙個函式。所以需要避免這種情況的產生。

2、就以a類和b類為例,當a類包含b類,a類無建構函式,b類存在預設的建構函式,那麼a類也會生成乙個預設的建構函式。

建構函式 解析建構函式的作用

建構函式 是一種特殊的方法。主要用來在建立物件時初始化物件,即為物件 成員變數 賦初始值,總與new 運算子一起使用在建立物件的語句中。特別的乙個類可以有多個建構函式 可根據其引數個數的不同或引數型別的不同來區分它們 即建構函式的 過載。那麼,為什麼要在建立物件時初始化物件呢?又是如何實現的呢?接下...

拷貝建構函式與析構函式的簡單解析

顧名思義,拷貝建構函式就是對建構函式的再一次拷貝,用乙個由建構函式已經建立出來的物件建立乙個新的物件。所以,拷貝建構函式的引數就只有乙個,是對本類的型別物件的引用 常用const進行修飾 在這裡,可能有人會問為什麼為什麼不是直接呼叫,而是使用引用。如果你直接呼叫,那麼物件會使用建構函式再建立乙個臨時...

php的建構函式解析

1 什麼是構造方法 構造方法是類中的乙個特殊方法。當使用 new 操作符建立乙個類的例項時,構造方法將會自動呼叫,其名稱 必須是 construct 在乙個類中只能宣告乙個構造方法,而是只有在每次建立物件的時候都會去呼叫一次構造 方法,不能主動的呼叫這個方法,所以通常用它執行一些有用的初始化任務。該...