當前位置:才華齋>計算機>C語言>

c++靜態區域性變數和靜態函式範例

C語言 閱讀(2.78W)

C++是C語言的繼承,它既可以進行C語言的過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的面向物件的程式設計。以下是為大家分享的c++靜態區域性變數和靜態函式範例,供大家參考借鑑,歡迎瀏覽!

c++靜態區域性變數和靜態函式範例

在函式體內定義了一個變數,每當程式執行到該語句時都會給該區域性變數分配記憶體。但隨著程式退出函式體,系統就會收回棧記憶體,區域性變數也相應失效。但有的時候我們需要在兩次呼叫之間對變數的值進行儲存。通常的想法是定義一個全域性變數來實現。但是這樣一來,變數已經不再屬於函式本身了,不再僅受函式的控制,給程式的`維護帶來不便。靜態區域性變數正好可以解決這個問題。靜態區域性變數儲存在全域性資料區,而不是儲存在棧中,每次的值保持到下一次呼叫,直到下次賦新值。該變數在全域性資料區內分配記憶體;靜態區域性變數在程式執行到該物件的宣告處時被首次初始化,即以後的函式呼叫不再進行初始化(這一點非常的重要);靜態區域性變數一般在宣告處初始化,如果沒有顯式初始化,會被程式自動初始化為0;它始終駐留在全域性資料區,直到程式執行結束。但其作用域為區域性作用域,當定義它的函式或語句塊結束時,其作用域隨之結束;靜態函式主要是用來訪問靜態成員,不能直接訪問類的非靜態成員;靜態成員函式主要為了呼叫方便,不需要生成物件就能呼叫。比如

複製程式碼 程式碼如下:

class X

{

public:

void MethodA();

static void MethodB();

}

此時MethodB可以直接呼叫,X::MethodB();

而MethodA必須在先生成類物件之後才能夠被呼叫,X x; odA();

複製程式碼 程式碼如下:

//Example 3

#include

void fn();

void main() {

fn(); fn(); fn();

}

void fn() {

static int n=10; //僅在初次呼叫它的時候被初始化,第二次呼叫的時候這句話就被忽略

cout<<n<<endl;

n++;

}