靜態變量和靜態函數

      C中的靜態變量和靜態函數。(1)C中的靜態變量是處於全局存儲區,區別於自動變量的存儲於棧中。兩者的關鍵區別是其作用域的區別。自動變量的作用域處於其所在的函數或語句塊中;而靜態變量的作用域起始於其定義處,終止於程序結束處。(2)C中的靜態函數主要是限制函數的名字以及可訪問域於文件中,表示此函數僅供此文件所用,不允許在其他文件中調用的。有關靜態函數的使用可以考慮幾點:一是靜態函數的名字僅可見於其所定義的文件。這就允許在不同的文件中存在同名的靜態函數。可以利用此特性將本文件常用的代碼抽象出來成爲函數,而在使用此段代碼的地方直接調用函數即可。這樣允許用簡短的名詞定義此函數。我的體驗,在面臨定義功能相同的函數是,爲他們取一個美麗的名字其實很困難,而在使用上對名字的記憶也頗費苦心。而用靜態函數可以省力許多。而普通函數是可以全局訪問的,而且在C中沒有名字空間的概念,所以對C中函數的命名頗費苦心。

 

再說C++中的靜態成員變量和靜態成員函數。(1)類靜態數據成員在編譯時創建並初始化:在該類的任何對象建立之前就存在,不屬於任何對象,而非靜態類成員變量則是屬於對象所有的。類靜態數據成員只有一個拷貝,爲所有此類的對象所共享。特別需要注意的一點是:靜態數據成員不能在類中初始化(對於常量靜態類變量有待考證,好像可以在類外或main()函數之前定義,初始化可以放在類中),一般在類外和main()函數之前初始化,缺省時初始化爲0。靜態數據成員用來定義類的各個對象所公有的數據,比全局變量更安全。(2)類靜態成員函數屬於整個類,不屬於某個對象,由該類所有對象共享。靜態成員可定義爲inline函數。一般情況下靜態成員函數用於訪問同一類中的靜態數據成員或全局變量,而不訪問非靜態成員,如需訪問非靜態成員,需要將對象作爲參數,通過對象名訪問該對象的非靜態成員。靜態成員函數也可以在類外定義,此時不可以用static修飾。靜態成員函數存在的原因是什麼呢?主要是在建立任何對象之前可用它來訪問靜態數據成員,普通函數不能實現此功能。

 

C++靜態成員和靜態成員函數的使用:靜態成員的調用格式:類名::靜態數據成員名、對象名.靜態數據成員名、對象指針->靜態數據成員、對象引用.靜態數據成員(但類中很少會出現公有數據成員,這段僅僅討論語法,未考慮實際運用中的數據封裝問題)。靜態成員函數的調用格式:類名::靜態成員函數名、對象名.靜態成員函數名、對象指針->靜態成員函數名、對象引用.靜態數據成員。靜態成員函數沒有this指針,因它不與特定對象相聯繫,調用時推薦使用“類名::靜態成員函數名”格式。總結來說,在有對象的情況下,可以用調用普通類成員函數、普通成員變量的方式調用靜態成員函數和靜態成員變量。從這裏可以看出靜態成員變量和靜態成員函數的使用應該是在不建立任何對象的情況下調用它們。其應用可以參見設計模式中Singletonpattern

 

引用:http://www.360doc.com/content/10/0926/21/2889855_56641469.shtml

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章