如何寫好建構函式

2021-05-06 17:23:07 字數 1550 閱讀 1326

王姍姍,華清遠見嵌入式學院

講師。在建立乙個物件時,常常需要做些初始化的工作,例如對資料成員賦初值。如果乙個資料成員未被賦初值,則它的值是不可預知的,保留了這些儲存單元的原狀,這就成為了這些資料成員的初始值。而我們知道,類的資料成員時不能在宣告類時初始化的,因為類並不是乙個實體,而是一種抽象型別,並不占用儲存空間,無處容納資料。所以為了解決這個問題,c++提供了建構函式來處理物件的初始化。建構函式是一種特殊的成員函式,它不需要使用者來呼叫它,在類物件進入其作用域時由系統自動呼叫。

其次,寫建構函式的時候我們要注意幾點:

1、建構函式的名字必須與類的名字一樣,為了編譯系統能識別它。

2、它不具有任何型別,不返回任何值。

3、它的功能由使用者定義,使用者根據初始化的要求設計函式體和函式引數。

4、在建構函式的函式體中,不僅可以對資料成員賦初值,而且可以包含其他語句。

5、如果使用者沒有定義建構函式,c++系統會自動生成乙個建構函式,只是這個建構函式的函式體是空的, 沒有引數,不執行初始化操作。但一旦使用者寫了乙個建構函式,系統將不在提供預設建構函式。

例如:這個時候我們再去編譯,系統將報錯,原因就是在主函式第一行定義time t ;時需要呼叫零個引數的建構函式,系統沒有提供,系統中只有三個引數的建構函式,故報錯。

再次,在建構函式中對各資料成員賦初值的方式也不盡相同。我們可以採用多種方式,例如:

1、帶引數的建構函式。

帶引數的建構函式中的形參,其對應的實參在定義物件時給定。用這種方式可以方便地實現對不同的物件進行不同的初始化。

2、用引數初始化表對資料成員初始化

這種方式就入上面加那句話

這裡用h對hour賦值,m對minuete賦值,s對sec賦值。

在乙個類中可以定義多個建構函式,也就是建構函式可以過載的。我們通過不同的建構函式可以使用不同的初始化方法來實現初始化。這些函式有相同的名字,而引數的個數或引數的型別不同。

例如:

這個時候main函式中有乙個定義:

這個時候該執行哪個建構函式就出現了歧義,所以不應同時使用建構函式的過載和有預設引數的建構函式。

其實往往書寫起建構函式時比理解什麼時候系統為我們例項化物件時呼叫哪個建構函式簡單的多,如果你寫程式報錯,我想應該更多的去尋找下是否你在寫建構函式的情況下提供了系統需要的那種建構函式。

所以這個時候分析程式,知道要呼叫哪個建構函式更重要,這裡給出了例子,僅用來舉例分析下。這是在過載運算子時寫的乙個函式,已經把++前置函式寫完了;

都是為了實現建立old物件,同時對old賦值。不同的是:

time old=*this這種方式使用的是用無參的建構函式構造old物件,然後對其賦值

time old(*this)這種方式使用的是呼叫拷貝建構函式,用this物件去構造old物件

故如果系統中沒有提供time(){}則系統將會報錯,所以在主函式中使用的時候還是要注意的,我們到底要選用哪種建構函式形式

如何寫 如何寫好指令碼?

好的指令碼當然要有好的開場白 好的開題 破題 話題引入,好的敘述與分析 好的結束語。好的指令碼還應有好的輔助說明的素材,700 800字的指令碼,對應的素材數量如下 非真人出鏡者 素材數量需要翻倍,最好找到超過20個素材。寫好指令碼還應注意以幾點 一 開門見山 快速切入主題,這樣的話就更容易讓觀眾對...

如何寫好簡歷

在簡歷控修改的簡歷中,最常見的問題就是簡歷太羅嗦,這並不是說簡歷的頁數太多,或者篇幅太多,而是內容太羅嗦,從標題往下讀,五行之內都看不到重點。這樣的簡歷別說是一天收到成百上千份簡歷的hr,隨便抓乙個路人甲乙丙都沒有耐心讀下去。有的同學會問,什麼是重點?我覺得我的簡歷都是重點,刪掉哪乙個都不行。那麼嘗...

如何寫好綜述文章

一 選題和收集資料 1 選題 選題要新穎,要選擇進展較快 知識尚未普及 原始報道積累較多 意見不一致而存在爭論的新課題,一般是自己熟悉的專業課題。通常建立在客觀需要 自我優勢的基礎上來選定題名。由編輯輯部約稿 編輯部已確定選題,根據其內容邀請相關專家撰寫。此類為評述性綜述,這類綜述著重評述,通過回顧...