歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C++靜態成員學習札記

一、靜態數據成員

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

  1.靜態成員的聲明

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

class Account
{
  public:
            Account();  //構造函數
            ~Account();  //析構函數
    //.....................
  private:
          static int number;  //靜態數據成員聲明
    //.....................
}

2.靜態數據成員的定義

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

1 //類型  類名::靜態成員名;

2 //類型 類名::靜態成員名 = 初始值

3 int Account::number;  //定義靜態成員並初始化為0

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

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

  3.靜態數據成員的訪問

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

  a)通過類名訪問

    類名::靜態成員名

  b)通過對象訪問

    對象名.靜態成員名

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

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

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

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

二、靜態成員函數

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

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

class Account
 {
    public:
            Account();  //構造函數
            ~Account();  //析構函數       
    //.....................
         static int getNumber()  //定義靜態成員函數
       {
          return number; //訪問靜態數據成員
       }

    private:
            static int number;  //靜態數據成員聲明
    //.....................
 }

2.調用方式

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

  a)類調用方式

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

  b)對象調用

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

  3.特別注意

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

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

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

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

Copyright © Linux教程網 All Rights Reserved