1. 程式人生 > >關於C++ 類資料成員初始化的一點總結【為什麼類定義中不能初始化成員變數】

關於C++ 類資料成員初始化的一點總結【為什麼類定義中不能初始化成員變數】

往往被初學者忽視的是,C++類中的資料初始化是有講究的,

一般需要遵循以下幾條約束:

  1.一般而言,類裡面的任何成員變數在定義時是不能初始化的。

      【為什麼???】

         這是一個可以值得探討的話題,每個人的解釋都不一樣,大部分人都認為這是編譯語法的規定,那麼有沒有考慮為什麼會有這個規定呢?

        個人認為可能的原因有:

         (1)類只是一個抽象型別,並不是實體的東西,利用這個抽象型別會例項化成不同的個體,每個個體的特徵(資料成員)都不一樣,如果在類定義中將特徵初始化了,豈不是破壞了抽象性,做了一個面向都一樣的模子?

           (2)類的定義實際相當與型別宣告,並沒有分配儲存空間,初始化的資料哪裡放? 類例項化以後才會有實體儲存地址及空間。

             (3)關於C++內部物件模型的考慮,後續有專門文章分析。
  2.一般的資料成員可以在建構函式中初始化。(構造初始化列表初始化和建構函式體內賦值初始化)
  3.const資料成員必須在建構函式的初始化列表中初始化(道理很簡單,const成員第一次資料初始化就是發生在類構造資料初始化時,一旦過了此時就會出現問題)。
  4.static要在類的定義外面初始化。   
  5.陣列成員是不能在初始化列表裡初始化的,不能給陣列指定明顯的初始化。  
或許有人問,以上幾條似乎有衝突喔!

一個類中能不能定義常量陣列?如:

const int aa[100];

如果可以,怎麼初始化aa?  

實際上不行的,這與3 5 矛盾。我們可以用static資料成員來解決此問題。