1. 程式人生 > >C++學習 之 static、const和static const

C++學習 之 static、const和static const

const定義的常量在超出其作用域之後其空間會被釋放,而static定義的靜態常量在函式執行後不會釋放其儲存空間

static表示的是靜態的。類的靜態成員函式、靜態成員變數是和類相關的,而不是和類的具體物件相關的。即使沒有具體物件,也能呼叫類的靜態成員函式和成員變數。一般類的靜態函式幾乎就是一個全域性函式,只不過它的作用域限於包含它的檔案中。

在C++中,static靜態成員變數不能在類的內部初始化。在類的內部只是宣告,定義必須在類定義體的外部,通常在類的實現檔案中初始化,如:double Account::Rate = 2.25;static關鍵字只能用於類定義體內部的宣告中,定義時不能標示為static

在C++中,const成員變數也不能在類定義處初始化,只能通過建構函式初始化列表進行,並且必須有建構函式。

const資料成員 只在某個物件生存期內是常量,而對於整個類而言卻是可變的。因為類可以建立多個物件,不同的物件其const資料成員的值可以不同。所以不能在類的宣告中初始化const資料成員,因為類的物件沒被建立時,編譯器不知道const資料成員的值是什麼。

const資料成員的初始化只能在類的建構函式的初始化列表中進行。要想建立在整個類中都恆定的常量,應該用類中的列舉常量來實現,或者static const。

class Test{  
public:  
    Test():a(0){}  
    enum {size1=100,size2=200};  
private:  
    const int a;//只能在建構函式初始化列表中初始化  
    static int b;//在類的實現檔案中定義並初始化  
    conststatic int c;//與 static const int c;相同。  
};  
   
int Test::b=0;//static成員變數不能在建構函式初始化列表中初始化,因為它不屬於某個物件。  
cosnt intTest::c=0;//注意:給靜態成員變數賦值時,不需要加static修飾符,但要加cosnt。

const成員函式主要目的是防止成員函式修改物件的內容。即const成員函式不能修改成員變數的值,但可以訪問成員變數。當方法成員函式時,該函式只能是const成員函式。

static成員函式主要目的是作為類作用域的全域性函式。不能訪問類的非靜態資料成員。類的靜態成員函式沒有this指標,這導致:1、不能直接存取類的非靜態成員變數,呼叫非靜態成員函式2、不能被宣告為virtual

參考連結