靜態變數和靜態成員函式

2021-06-21 11:23:29 字數 1491 閱讀 3371

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

c中的靜態變數和靜態函式。(1)

c中的靜態變數是處於全域性儲存區

,區別於自動變數的儲存於棧中。兩者的關鍵區別是其作用域的區別。自動變數的作用域處於其所在的函式或語句塊中;而靜態變數的作用域起始於其定義處,終止於程式結束處。(2)

c中的靜態函式主要是限制函式的名字以及可訪問域於單個原始檔中

,表示此函式僅供此檔案所用,不允許在其他檔案中呼叫的。因此存在多個檔案中出現同名的靜態函式。靜態函式儲存在**段。

全域性變數、靜態全域性變數、靜態區域性變數和區域性變數的區別

變數可以分為:全域性變數、靜態全域性變數、靜態區域性變數和區域性變數。

按儲存區域分,全域性變數、靜態全域性變數和靜態區域性變數都存放在記憶體的靜態儲存區域,區域性變數存放在記憶體的棧區。

按作用域分,

全域性變數在整個工程檔案內都有效

;靜態全域性變數只在定義它的檔案內有效;

靜態區域性變數只在定義它的函式內有效,並且程式僅分配一次記憶體,函式返回後,該變數不會消失;區域性變數在定義它的函式內有效,但是函式返回後失效。

區域性變數改變為靜態變數後是改變了它的儲存方式即改變了它的生存期。把全域性變數改變為靜態變數後是改變了它的作用域,限制了它的使用範圍。

static函式與普通函式作用域不同,只在定義該變數的原始檔內有效。只在當前原始檔中使用的函式應該說明為內部函式(static),內部函式應該在當前原始檔中說明和定義。對於可在當前原始檔以外使用的函式,應該在乙個標頭檔案中說明,要使用這些函式的原始檔要包含這個標頭檔案。

static全域性變數與普通的全域性變數有什麼區別:static全域性變數只初使化一次,防止在其他檔案單元中被引用;

static區域性變數和普通區域性變數有什麼區別:static區域性變數只被初始化一次,下一次依據上一次結果值;

static函式與普通函式有什麼區別:static函式與普通函式作用域不同,只在定義該變數的原始檔內有效;

全域性變數和靜態變數如果沒有手工初始化,則由編譯器初始化為0。區域性變數的值不可知。

靜態成員變數 和 靜態成員函式

資料成員可以分靜態變數 非靜態變數兩種.靜態成員 靜態類中的成員加入static修飾符,即是靜態成員.可以直接使用類名 靜態成員名訪問此靜態成員,因為靜態成員存在於記憶體,非靜態成員需要例項化才會分配記憶體,所以靜態成員不能訪問非靜態的成員.因為靜態成員存在於記憶體,所以非靜態成員可以直接訪問類中靜...

靜態成員變數和靜態成員函式

我們學到的類物件的成員變數一般都是這個物件專屬,不能為其他物件所共有。然而在實際程式設計中我們需要統計物件的數量等問題,所以就必須設定乙個類的物件所共有的變數,就是靜態成員變數。首先通過乙個簡單的例程 說明靜態成員如何使用。includeusing namespace std class a vir...

靜態成員變數和靜態成員函式

本章內容均為coursera中c 程式設計課件的整理 基本概念 靜態成員 在說明前面加了static關鍵字的成員。class crectangle 普通成員變數每個物件有各自的乙份,而靜態成員變數一共就乙份,為所有物件共享。sizeof 運算子不會計算靜態成員變數。class cmyclass 則 ...