使用關鍵字static來修飾變數,該變數被存放在記憶體的靜態區(全域性資料區)。不會因為函式的生命週期影響而釋放空間。
在宣告它的整個檔案中都是可見的,而在檔案之外不可訪問。
#include using namespace std;
#pragma warning(disable : 4996)
static int n;//靜態全域性變數
void main()
方便同類物件共享訪問,提供了一種共享機制。
1、全域性變數不使用static修飾,全域性變數預設有外部鏈結,作用域是整個工程,在乙個檔案內定義的全域性變數,在另乙個檔案中,通過extem宣告全域性變數,就可以使用了。
2、全域性靜態變數需要顯式使用static修飾,作用域只適用於當前檔案,其他檔案即使使用extem宣告也不能使用。
定義在函式體之內的變數為區域性變數,使用static修飾為靜態區域性變數。
void main()
函式的區域性變數分配在棧記憶體中,隨著程式退出函式體,系統就會**棧記憶體,區域性變數也相應失效。如果我想在多次呼叫中對區域性變數的值進行儲存,我們通常會定義乙個全域性變數來實現。但這樣一來,變數不在屬於函式體本身,不在僅受函式的控制,給程式的維護帶來不便。把區域性變數宣告為靜態的就正好解決了這個問題。靜態區域性變數儲存在靜態區(全域性資料區),而不是棧中,每一次的值可以保持到下次使用。
注意:1、靜態區域性變數在程式執行的該物件宣告時首次初試化,以後的函式呼叫不在進行初試化。
2、一般在宣告處初試化,如果沒有顯式初試化,那麼值為0.
3、其作用域為區域性作用域,當定義它的函式或語句結束時,其作用域也隨之結束。
在函式的返回值型別前加static關鍵字,即為靜態函式。與普通函式不同,只能在當前檔案可見,不能被其他檔案使用。
static void fun1()
void fun2()
void main()
靜態函式不能被其它檔案所用,在其它檔案中可以定義相同名字的函式,不會發生衝突。
對於一般資料成員變數來說,多次定義類的物件都會重新對其資料成員重新拷貝。靜態資料成員只會拷貝乙份,由該類的所有物件共享訪問。靜態資料成員只分配了一次記憶體,可供所有物件共享。所以它的值對每個物件都是一樣的,它的值可以更新。
注意:1、靜態資料成員儲存在靜態區(全域性資料區),定義的時候要分配記憶體,所以不能在類的宣告中定義。
初試化方式: 《資料型別》《類名》::《靜態資料成員名》=《值》
2、靜態資料成員可以是私有的(private),但全域性變數不能。
3、一般呼叫方法: 《類物件名》.《靜態資料成員名》
和靜態資料成員一樣,為類的所以物件服務而不是為某乙個具體的物件服務。普通成員函式一般都隱含了乙個this指標,this指標指向類的物件本身,因為普通成員函式總是具體的屬於某個類的具體物件的。但是與普通函式相比,靜態成員函式不與任何物件相聯絡,因此不具有this指標。說白了就是不能呼叫屬於類物件的非靜態資料成員和非靜態成員函式,只能呼叫靜態成員函式。
class test
int getc()
void addc()
static void myprint()
{//cout《呼叫方法:《類名》::《靜態成員函式名》(引數列表)
靜態成員函式總結:
1、出現在類的內部,使用static修飾
2、靜態成員之間可以相互訪問
3、非靜態函式可以任意訪問靜態成員函式和靜態資料成員
4、靜態成員函式不能訪問非靜態成員函式和非靜態資料成員。
函式內部定義的變數,在程式執行到它的定義處時,編譯器為它在棧上分配空間,大家知道,函式在棧上分配的空間在此函式執行結束時會釋放掉,這樣就產生了乙個問題: 如果想將函式中此變數的值儲存至下一次呼叫時,如何實現? 最容易想到的方法是定義乙個全域性的變數,但定義為乙個全域性變數有許多缺點,最明顯的缺點是破壞了此變數的訪問範圍(使得在此函式中定義的變數,不僅僅受此函式控制)。
需要乙個資料物件為整個類而非某個物件服務,同時又力求不破壞類的封裝性,即要求此成員隱藏在類的內部,對外不可見。
靜態成員變數 和 靜態成員函式
資料成員可以分靜態變數 非靜態變數兩種.靜態成員 靜態類中的成員加入static修飾符,即是靜態成員.可以直接使用類名 靜態成員名訪問此靜態成員,因為靜態成員存在於記憶體,非靜態成員需要例項化才會分配記憶體,所以靜態成員不能訪問非靜態的成員.因為靜態成員存在於記憶體,所以非靜態成員可以直接訪問類中靜...
靜態成員變數和靜態成員函式
我們學到的類物件的成員變數一般都是這個物件專屬,不能為其他物件所共有。然而在實際程式設計中我們需要統計物件的數量等問題,所以就必須設定乙個類的物件所共有的變數,就是靜態成員變數。首先通過乙個簡單的例程 說明靜態成員如何使用。includeusing namespace std class a vir...
靜態成員變數和靜態成員函式
本章內容均為coursera中c 程式設計課件的整理 基本概念 靜態成員 在說明前面加了static關鍵字的成員。class crectangle 普通成員變數每個物件有各自的乙份,而靜態成員變數一共就乙份,為所有物件共享。sizeof 運算子不會計算靜態成員變數。class cmyclass 則 ...