C++學習之靜態成員


一、靜態數據成員

  C++允許將類的數據成員定義為靜態成員。靜態數據成員是屬於類的,整個類只有一個備份,相當於類的全局變量,能夠被該類的所有對象共用。

  1.靜態成員的聲明

  在類數據成員的聲明前加上關鍵字static,就將該成員指定成了靜態數據成員。靜態數據成員遵守public、private、protected訪問權限的限定規則。如:

 1 class Account
2 {
3 public:
4 Account(); //構造函數
5 ~Account(); //析構函數
6 //.....................
7 private:
8 static int number; //靜態數據成員聲明
9 //.....................
10 }

  2.靜態數據成員的定義

  在類的聲明中將數據成員指定為靜態成員,只是一種聲明,並不會為該成員分配內存空間,在使用之前應該對他進行定義。靜態數據成員常常在類外進行定義,與類成員函數的定義方法一樣。定義形式如:  

1 //類型 類名::靜態成員名;
2 //類型 類名::靜態成員名 = 初始值
3 int Account::number; //定義靜態成員並初始化為0

  注意:(1)在類外定義靜態數據成員時,不能加上static限定詞

     (2)在定義靜態數據成員時可以指定他的初始值,若定義是沒有指定初始值,系統將會自動賦上默認值

  3.靜態數據成員的訪問

  靜態成員屬於整個類,如果將他定義為類的公有成員,在類外可有兩種方式訪問。

  a)通過類名訪問

    類名::靜態成員名

  b)通過對象訪問

    對象名.靜態成員名

  4.靜態數據成員與非靜態數據成員的區別

  (1)非靜態數據成員與對象關聯,每個對象擁有獨立的數據成員備份。靜態數據成員與類關聯,整個類只有一份靜態數據成員備份,由全類所有對象共用。(C++會為對象的非靜態數據成員分配獨立的內存空間,而靜態數據成員在內存中則只分配一次)

  (2)非靜態數據成員只有在定義了對象之后才存在(也就是分配內存空間)。靜態數據成員不屬於單個對象,即使沒有定義他所屬類的任何對象時,就已經存在了。

  (3)非靜態數據成員的作用域限定在定義對象的塊作用域內,靜態數據成員自他的定義開始到程序結束之前有效。

 

二、靜態成員函數

  在類成員函數的原型前面加上static就將他定義成了靜態成員函數。靜態成員函數屬於整個類,他只能訪問該類的靜態成員(包括靜態數據成員和靜態成員函數),不能訪問非靜態成員(包括非靜態數據成員和非靜態成員函數)。

  1.靜態成員函數的聲明定義

 1 class Account
2 {
3 public:
4 Account(); //構造函數
5 ~Account(); //析構函數       
6 //.....................
7      static int getNumber() //定義靜態成員函數
8        {
9           return number; //訪問靜態數據成員
10        }
11
12 private:
13 static int number; //靜態數據成員聲明
14 //.....................
15 }

  2.調用方式

  靜態成員函數的調用方式有兩種:

  a)類調用方式

    類名::靜態成員函數名(參數表);

  b)對象調用

    對象名.靜態成員函數名(參數表);

  3.特別注意

  (1)和普通成員函數一樣,靜態成員函數也可以在類內或類外定義,還可以定義成內聯函數

  (2)靜態函數只能訪問靜態成員(包括靜態數據成員和靜態成員函數),不能訪問非靜態成員(包括非靜態數據成員和非靜態成員函數)

  (3)在類外定義靜態成員函數時,不能加上static限定詞

  (4)靜態成員函數可以在定義類的任何對象之前被調用,非靜態成員只有在定義對象后,通過對象才能訪問

 

 

 

 

ps:如果有什么不對的地方,希望各位前輩同行能夠批評指出,本人將感激不盡!!!!


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com