C 靜態成員變數與靜態成員函式

2021-09-23 17:16:56 字數 1214 閱讀 3707

類的靜態成員有兩種:靜態成員變數和靜態成員函式,語法是在普通成員變數和成員函式前加static關鍵字。

0、定義

class crect;
1、存在原因

靜態成員變數在本質上是全域性變數。乙個類,哪怕乙個物件都不存在,其靜態成員變數也是存在的。靜態成員函式並不需要作用在某個具體的物件上,因此本質上是全域性函式。設定靜態成員的目的,是為了將某些和類緊密相關的全域性變數和全域性函式寫到類裡面,形式上成為乙個整體,達到封裝的效果,但其效果與定義全域性變數/函式相同。

2、靜態與靜態成員變數/函式的區別

3、一些規則

4、案例

例1 通過類名呼叫類的普通成員函式與靜態成員函式

#include using namespace std;

class crect

static void show(){}

};int main()

編譯錯誤:error c2352: 『crect::setparam』 : illegal call of non-static member function

結論:不能通過類名來呼叫類的非靜態成員函式

例2 通過類的物件呼叫類的靜態成員函式與非靜態成員函式

#include using namespace std;

class crect

static void show(){}

};int main()

編譯通過

結論:可以通過類的物件來呼叫類的靜態/非靜態成員函式

例3 在類的靜態成員函式中使用類的非靜態成員變數

#include using namespace std;

class crect

static void show()

static void show()

;int crect::m_height = 0;//a

int main()

在a,b,c三處分別初始化類的靜態成員變數時只有a出初始化正確,b和c處初始化編譯出錯:error c2655: 『m_height』 : definition or redeclaration illegal in current scope

結論:類的靜態成員變數初始化的位置為類外且在main函式前(是否理解有誤??)

5、參考

c 靜態成員變數與靜態成員函式

普通成員變數每個物件各自持有乙份,而靜態成員變數只有乙份,被所有同類物件共享 普通成員函式一定是作用在某個物件上的,而靜態成員函式並不具體作用在某個物件上 訪問方式 訪問普通成員時,要通過物件名.成員名的方式,指明要訪問的成員變數是屬於哪個物件的,或要呼叫的成員函式作用於哪個物件 訪問靜態成員時,則...

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

此文針對於初學者或者對這一部分掌握不太清楚的人。首先靜態成員函式的宣告 static void setname qstring name 需要在函式的宣告前加static關鍵字。定義的時候和普通成員函式一樣,不需要加static,但是靜態成員函式只能訪問靜態成員變數和靜態成源函式。class dem...

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

這篇介紹了靜態成員函式與靜態成員變數,是我的讀書筆記,我希望它夠簡短但又比較全面,起到複習的作用。如果有一些c 知識記不清楚了,它可以幫你很快回憶起來。1 加在區域性變數的前面使之成為靜態區域性變數,作用域還是在函式內部,可是生存週期延長了。2 加在全域性變數的前面限定該變數作用域為檔案作用域,就是...