1. 簡述
類的成員變數多種多樣,比如:int a, const int a, int &a, static int a, static const int a, statice int& a。前面三個分別是普通變數、const變數和引用變數,後面的三個是前面三個分別加上了static。本文主要分析這六種變數初始化的位置。
2. 說明
對於int、const int和int&,這三個型別相對於static來說,每個物件都有乙份,因此每個物件都要構造一次。其中,int的初始化不受限制,**都行。const int和int &要求在定義的時候初始化,因此,預設要求只能在初始化成員列表中進行。static int、static const int和static int&這三個型別,只要是加上了static,就是靜態的,那麼對於類來說就是唯一的,所有物件共用乙個,那麼就應該在在類檔案中初始化,在其他任何地方初始化都不合適。有人可能會想,static const int,也是const能不能在初始化成員列表中初始化呢?不行,如果在初始化成員列表中初始化,那麼每呼叫一次建構函式,就會重新初始化一次這個型別,而這個型別是static,不應該重複初始化,編譯不過的,假設編譯過了,那麼這個型別也會多次被初始化,與const相悖。
3. **
#include
<
iostream
>
using
namespace
std;
class
test //
建構函式初始化成員列表
};int
test::d =0
; // 類檔案
const
inttest::e =0
; // 類檔案
int&
test::f
=test::d; // 類檔案
intmain()
4. 參考資料
c++ static、const和static const 以及它們的初始化
5. 備註
參考的文章中提到static const int也可以在建構函式中初始化,這一點我驗證過了,在建構函式成員初始化列表中,和建構函式中都是不行的,分別編譯報錯:「靜態變數只能在其定義處被初始化」,「對唯讀變數賦值」。總之,只要有static,就是靜態的,就只能有乙份,只能在類檔案中初始化。
類成員變數初始化
在 c 中,類的成員變數未初始化問題,取決於物件建立方式,不同的建立方式,直接導致類成員變數的初值不同。本文通過下例,得出一下結論 1.在函式體內置立乙個物件,類成員變數和普通的區域性變數一樣,是乙個隨機值。2.建立乙個全域性成員物件,類成員變數和全域性變數一樣,編譯器賦值為 0。3.在函式體內 n...
類成員初始化
在類內部 初始化的順序 靜態的成員變數 普通的成員變數 構造器的呼叫。在派生類中 初始化的順序 呼叫基類的構造器 按宣告順序呼叫成員的初始化方法 呼叫派生類構造器主體 大多數類的初始化都是按照這些順序結合在一起的。下面是乙個例子 public class test extends sub publi...
類成員初始化
一 預設呼叫的無參建構函式 include include using namespace std class studentid class student int main 8 91011class student 20 2122 intmain 執行結果 重新設計建構函式,對s物件進行初始化,...