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

C++學習之靜態成員,學習靜態成員

編輯:C++入門知識

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:如果有什麼不對的地方,希望各位前輩同行能夠批評指出,本人將感激不盡!!!!

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