怎樣進(jìn)行C++靜態(tài)構(gòu)造函數(shù)?
函數(shù)是C++ 語(yǔ)言程序的主要組成部分,一個(gè)函數(shù)可以調(diào)用其他函數(shù)。在設(shè)計(jì)良好的程序中,每個(gè)函數(shù)都有特定的目的,也就是在創(chuàng)建***個(gè)實(shí)例或引用任何靜態(tài)成員之前,由.NET自動(dòng)調(diào)用。
靜態(tài)構(gòu)造函數(shù)是C++的一個(gè)新特性,其實(shí)好像很少用到。不過(guò)當(dāng)我們想初始化一些靜態(tài)變量的時(shí)候就需要用到它了。這個(gè)構(gòu)造函數(shù)是屬于類的,而不是屬于哪里實(shí)例的,就是說(shuō)這個(gè)構(gòu)造函數(shù)只會(huì)被執(zhí)行一次。
以下是引用片段:
- class SimpleClass
- {
- // Static constructor
- static SimpleClass()
- {
- //
- }
- }
在使用C++靜態(tài)構(gòu)造函數(shù)的時(shí)候應(yīng)該注意幾點(diǎn):
1、靜態(tài)構(gòu)造函數(shù)既沒(méi)有訪問(wèn)修飾符,也沒(méi)有參數(shù)。因?yàn)槭?NET調(diào)用的,所以像public和private等修飾符就沒(méi)有意義了。
2、是在創(chuàng)建***個(gè)類實(shí)例或任何靜態(tài)成員被引用時(shí),.NET將自動(dòng)調(diào)用靜態(tài)構(gòu)造函數(shù)來(lái)初始化類,也就是說(shuō)我們無(wú)法直接調(diào)用靜態(tài)構(gòu)造函數(shù),也就無(wú)法控制什么時(shí)候執(zhí)行靜態(tài)構(gòu)造函數(shù)了。
3、一個(gè)類只能有一個(gè)靜態(tài)構(gòu)造函數(shù)。
4、無(wú)參數(shù)的構(gòu)造函數(shù)可以與靜態(tài)構(gòu)造函數(shù)共存。盡管參數(shù)列表相同,但一個(gè)屬于類,一個(gè)屬于實(shí)例,所以不會(huì)沖突。
5、最多只運(yùn)行一次。
6、靜態(tài)構(gòu)造函數(shù)不可以被繼承。
7、如果沒(méi)有寫(xiě)C++靜態(tài)構(gòu)造函數(shù),而類中包含帶有初始值設(shè)定的靜態(tài)成員,那么編譯器會(huì)自動(dòng)生成默認(rèn)的C++靜態(tài)構(gòu)造函數(shù)。
現(xiàn)在我們來(lái)看構(gòu)造函數(shù)中冒號(hào)初始化和函數(shù)初始化的問(wèn)題,類構(gòu)造函數(shù)的作用是創(chuàng)建一個(gè)類的對(duì)象時(shí),調(diào)用它來(lái)構(gòu)造這個(gè)類對(duì)象的數(shù)據(jù)成員。一要給出此數(shù)據(jù)成員分配內(nèi)存空間,二是要給函數(shù)數(shù)據(jù)成員初始化,構(gòu)造數(shù)據(jù)成員是按數(shù)據(jù)成員在類中聲明的順序進(jìn)行構(gòu)造。
冒號(hào)初始化與函數(shù)體初始化的區(qū)別在于:
冒號(hào)初始化是給數(shù)據(jù)成員分配內(nèi)存空間時(shí)就進(jìn)行初始化,就是說(shuō)分配一個(gè)數(shù)據(jù)成員只要冒號(hào)后有此數(shù)據(jù)成員的賦值表達(dá)式(此表達(dá)式必須是括號(hào)賦值表達(dá)式)。那么分配了內(nèi)存空間后在進(jìn)入函數(shù)體之前給數(shù)據(jù)成員賦值。
就是說(shuō)初始化這個(gè)數(shù)據(jù)成員此時(shí)函數(shù)體還未執(zhí)行。 所以在C++中就增加了這種機(jī)制,這是面向?qū)ο缶幊趟仨毜?。不知道我講明白沒(méi)有。如不明白請(qǐng)查閱有關(guān)資料。在上面的程序中通不過(guò)編譯。
編譯系統(tǒng)會(huì)告訴你teacher這個(gè)類對(duì)象缺默認(rèn)構(gòu)造函數(shù),因?yàn)樵趖each 類中沒(méi)有定義默認(rèn)的構(gòu)造函數(shù)。那么帶參數(shù)的構(gòu)造函數(shù)怎么進(jìn)行構(gòu)造呢?通過(guò)我們前面提到的冒號(hào)賦值。在Student類中有兩個(gè)數(shù)據(jù)成員。
一個(gè)是常量數(shù)據(jù)成員,一個(gè)是引用數(shù)據(jù)成員,并且在構(gòu)造函數(shù)中初始化了這兩個(gè)數(shù)據(jù)成員,但是這并不能通過(guò)編譯,因?yàn)槌A砍跏蓟瘯r(shí)必須賦值,它的值是不能再改變的,與常量一樣引用初始化也需要賦值,定義了引用后,它就和引用的目標(biāo)維系在了一起,也是不能再被賦值的。
【編輯推薦】