溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中怎么靜態(tài)構(gòu)造函數(shù)

發(fā)布時間:2021-07-28 14:04:16 來源:億速云 閱讀:346 作者:Leah 欄目:編程語言

C++中怎么靜態(tài)構(gòu)造函數(shù),針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

函數(shù)是C++ 語言程序的主要組成部分,一個函數(shù)可以調(diào)用其他函數(shù)。在設計良好的程序中,每個函數(shù)都有特定的目的,也就是在創(chuàng)建***個實例或引用任何靜態(tài)成員之前,由.NET自動調(diào)用。

靜態(tài)構(gòu)造函數(shù)是C++的一個新特性,其實好像很少用到。不過當我們想初始化一些靜態(tài)變量的時候就需要用到它了。這個構(gòu)造函數(shù)是屬于類的,而不是屬于哪里實例的,就是說這個構(gòu)造函數(shù)只會被執(zhí)行一次。

以下是引用片段:

 class SimpleClass   {   // Static constructor   static SimpleClass()   {   //   }   }

在使用C++靜態(tài)構(gòu)造函數(shù)的時候應該注意幾點:

1、靜態(tài)構(gòu)造函數(shù)既沒有訪問修飾符,也沒有參數(shù)。因為是.NET調(diào)用的,所以像public和private等修飾符就沒有意義了。

2、是在創(chuàng)建***個類實例或任何靜態(tài)成員被引用時,.NET將自動調(diào)用靜態(tài)構(gòu)造函數(shù)來初始化類,也就是說我們無法直接調(diào)用靜態(tài)構(gòu)造函數(shù),也就無法控制什么時候執(zhí)行靜態(tài)構(gòu)造函數(shù)了。

3、一個類只能有一個靜態(tài)構(gòu)造函數(shù)。

4、無參數(shù)的構(gòu)造函數(shù)可以與靜態(tài)構(gòu)造函數(shù)共存。盡管參數(shù)列表相同,但一個屬于類,一個屬于實例,所以不會沖突。

5、最多只運行一次。

6、靜態(tài)構(gòu)造函數(shù)不可以被繼承。

7、如果沒有寫C++靜態(tài)構(gòu)造函數(shù),而類中包含帶有初始值設定的靜態(tài)成員,那么編譯器會自動生成默認的C++靜態(tài)構(gòu)造函數(shù)。

現(xiàn)在我們來看構(gòu)造函數(shù)中冒號初始化和函數(shù)初始化的問題,類構(gòu)造函數(shù)的作用是創(chuàng)建一個類的對象時,調(diào)用它來構(gòu)造這個類對象的數(shù)據(jù)成員。一要給出此數(shù)據(jù)成員分配內(nèi)存空間,二是要給函數(shù)數(shù)據(jù)成員初始化,構(gòu)造數(shù)據(jù)成員是按數(shù)據(jù)成員在類中聲明的順序進行構(gòu)造。

冒號初始化與函數(shù)體初始化的區(qū)別在于:

冒號初始化是給數(shù)據(jù)成員分配內(nèi)存空間時就進行初始化,就是說分配一個數(shù)據(jù)成員只要冒號后有此數(shù)據(jù)成員的賦值表達式(此表達式必須是括號賦值表達式)。那么分配了內(nèi)存空間后在進入函數(shù)體之前給數(shù)據(jù)成員賦值。

就是說初始化這個數(shù)據(jù)成員此時函數(shù)體還未執(zhí)行。 所以在C++中就增加了這種機制,這是面向?qū)ο缶幊趟仨毜?。不知道我講明白沒有。如不明白請查閱有關(guān)資料。在上面的程序中通不過編譯。

編譯系統(tǒng)會告訴你teacher這個類對象缺默認構(gòu)造函數(shù),因為在teach 類中沒有定義默認的構(gòu)造函數(shù)。那么帶參數(shù)的構(gòu)造函數(shù)怎么進行構(gòu)造呢?通過我們前面提到的冒號賦值。在Student類中有兩個數(shù)據(jù)成員。

一個是常量數(shù)據(jù)成員,一個是引用數(shù)據(jù)成員,并且在構(gòu)造函數(shù)中初始化了這兩個數(shù)據(jù)成員,但是這并不能通過編譯,因為常量初始化時必須賦值,它的值是不能再改變的,與常量一樣引用初始化也需要賦值,定義了引用后,它就和引用的目標維系在了一起,也是不能再被賦值的。

關(guān)于C++中怎么靜態(tài)構(gòu)造函數(shù)問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI