程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 怎樣進行C++靜態構造函數?

怎樣進行C++靜態構造函數?

編輯:C++入門知識

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

靜態構造函數是C++的一個新特性,其實好像很少用到。不過當我們想初始化一些靜態變量的時候就需要用到它了。這個構造函數是屬於類的,而不是屬於哪裡實例的,就是說這個構造函數只會被執行一次。

以下是引用片段:

  1.  class SimpleClass   
  2. {   
  3. // Static constructor   
  4. static SimpleClass()   
  5. {   
  6. //   
  7. }   

在使用C++靜態構造函數的時候應該注意幾點:

1、靜態構造函數既沒有訪問修飾符,也沒有參數。因為是.NET調用的,所以像public和private等修飾符就沒有意義了。

2、是在創建第一個類實例或任何靜態成員被引用時,.NET將自動調用靜態構造函數來初始化類,也就是說我們無法直接調用靜態構造函數,也就無法控制什麼時候執行靜態構造函數了。

3、一個類只能有一個靜態構造函數。

4、無參數的構造函數可以與靜態構造函數共存。盡管參數列表相同,但一個屬於類,一個屬於實例,所以不會沖突。

5、最多只運行一次。

6、靜態構造函數不可以被繼承。

7、如果沒有寫C++靜態構造函數,而類中包含帶有初始值設定的靜態成員,那麼編譯器會自動生成默認的C++靜態構造函數。

現在我們來看構造函數中冒號初始化和函數初始化的問題,類構造函數的作用是創建一個類的對象時,調用它來構造這個類對象的數據成員。一要給出此數據成員分配內存空間,二是要給函數數據成員初始化,構造數據成員是按數據成員在類中聲明的順序進行構造。

冒號初始化與函數體初始化的區別在於:

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

就是說初始化這個數據成員此時函數體還未執行。 所以在C++中就增加了這種機制,這是面向對象編程所必須的。不知道我講明白沒有。如不明白請查閱有關資料。在上面的程序中通不過編譯。

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

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

  1. 簡介學習C++總結之談
  2. 對C++庫函數進行學習探索總結筆記
  3. C++類庫設計的基本構思與方法
  4. C++語言真的還有市場價值?
  5. C++類庫設計的基本構思與方法

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved